我是 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
与并发 HashMap 相比,读取性能相当低。
我已经尝试使用 1024/2048 段,默认膨胀因子,默认 Marshaller。但还是一样的结果。
我只是想利用堆外特性来减少 GC 暂停,并且无意使用持久性事物或复制或使用 JVM 之外的映射。
所以问题是我应该使用 ChronicleMap 还是坚持使用 ConcurrentHashMap?或者在 ChronicleMap 的情况下,我可以使用任何其他配置来提高性能?
提前致谢。
** 使用https://github.com/OpenHFT/Chronicle-Map/blob/master/src/test/java/net/openhft/chronicle/map/perf/MapJLBHTest.java进行基准测试:**