私は JVM のオフヒープ ストレージを初めて使用しますが、ChronicleMap はオフヒープに適しています。しかし、私の主な関心事は、主にパフォーマンスに関連しています。
構成で簡単なテストを実行しました
ChronicleMapBuilder<IntValue, BondVOImpl> builder =
ChronicleMapBuilder.of(IntValue.class, BondVOImpl.class)
.minSegments(512)
.averageValue(new BondVOImpl())
.maxBloatFactor(4.0)
.valueMarshaller(new BytesMarshallableReaderWriter<>(BondVOImpl.class))
.entries(ITERATIONS);
そして、次の結果が見つかりました
----- Concurrent HASHMAP ------------------------
Time for putting 7258
Time for getting 678
----- CHRONICLE MAP ------------------------
Time for putting 4704
Time for getting 2246
Concurrent HashMap と比較すると、読み取りパフォーマンスはかなり低いです。
デフォルトの Bloat ファクターとデフォルトの Marshaller を使用して、1024/2048 セグメントを試しました。しかし、それでも同じ結果です。
Off Heap 機能を利用して GC の一時停止を減らしたいだけで、永続的なものやレプリケーションを使用したり、JVM を超えてマップを使用したりするつもりはありません。
問題は、ChronicleMap を使用するか、ConcurrentHashMap を使用するかです。または、ChronicleMap の場合にパフォーマンスを向上させるために使用できる他の構成はありますか?
前もって感謝します。
** https://github.com/OpenHFT/Chronicle-Map/blob/master/src/test/java/net/openhft/chronicle/map/perf/MapJLBHTest.javaを使用したベンチマーク:**