質問

JBossキャッシュまたはEhcacheのいずれかのキャッシュを実装するために使用することを検討しています。両方のAPIを見た後、JBossはおそらくEhcacheよりも少しメモリ効率が高いという直感があります。 ehcacheがデータをラップする必要がある間、キャッシュにオブジェクト Element 物体。

キャッシュに繰り返しキーで価値のあるタプルを繰り返し挿入するクイックベンチを設定しました。キーと値のクラスは非常に簡単です:

鍵:

public class Key implements Serializable {
    private static final long serialVersionUID = -2124973847139523943L;

    private final int key;

    public Key(int pValue) {
        this.key = pValue;
    }

    public int getValue() {
        return this.key;
    }

    @Override
    public String toString() {
        return "Key [key=" + this.key + "]";
    }
}

価値:

public class Value implements Serializable{

    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = -499278480347842883L;
}

100000オブジェクトを挿入すると、Ehcacheが予想したことをメモリに挿入するとき、Ehcacheは13396バイトを使用してオブジェクトを保存し、JBossは同じ操作に5712バイトを使用しました(これは同じテストを使用して同じテスト以来良好です ConcurrentHashMap 5680バイトを使用)。

しかし、実行時間を見たとき、私は非常に悪い驚きを持っていました:ehcacheは私のテストを実行するのに300ミリ秒かかりましたが、JBosscacheが同じことをするのに44秒かかりました。私のjboss構成には、この違いを説明する何かが腐っていると確信しています。

ehcacheはこのようにプログラム的に初期化されています:

CacheConfiguration cacheConfiguration = new CacheConfiguration("MyCache", 0).diskPersistent(false).eternal(true)                
    .diskExpiryThreadIntervalSeconds(100000).transactionalMode(TransactionalMode.OFF);
final Configuration config = new Configuration();
config.setDefaultCacheConfiguration(cacheConfiguration);
this.cacheManager = new CacheManager(config);
cacheConfiguration.name("primaryCache");
this.cache = new net.sf.ehcache.Cache(cacheConfiguration);
this.cacheManager.addCache(this.cache);

JBossキャッシュは、次のBean構成でSpringを使用して作成されます。

<bean id="cache" class="org.jboss.cache.Cache" factory-bean="cacheFactory" factory-method="createCache">
    <constructor-arg>
        <value type="java.io.InputStream">/META-INF/jbossCacheSimpleConf.xml</value>
    </constructor-arg>
</bean>

そして、次のこと jbossCacheConf.xml ファイル:

<?xml version="1.0" encoding="UTF-8"?>
<jbosscache xmlns="urn:jboss:jbosscache-core:config:3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="urn:jboss:jbosscache-core:config:3.2 http://www.jboss.org/schema/jbosscache/jbosscache-config-3.2.xsd">

</jbosscache>

完全性のために、ehcacheテストは次のとおりです。

for (int i = 0; i < ITEM_COUNT; i++) {
    this.cache.put(new Element(new Key(i), new Value()));
}

JBossの1つは次のとおりです。

for (int i = 0; i < ITEM_COUNT; i++) {
    this.processNode.put(new Key(i), new Value());
}

私のセットアップ/ベンチマークで何か問題がありますか?

役に立ちましたか?

解決

に切り替えました infinispan そして、私には奇妙なパフォーマンスの問題はありません。

他のヒント

デフォルトのjbosscache構成には注意してください。デフォルトでは、jbosscacheがスレーブノードでデータを見つけて再現しようとする可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top