0

私は 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を使用したベンチマーク:**

ここに画像の説明を入力

4

1 に答える 1

2

まず第一に、私はあなたのテスト結果を買いません。ベンチマーク用のコードを提供しておらず、ベンチマークがかなり不正確であると思われます (そうです、ベンチマークはかなり複雑なテーマであり、ウォームアップや関連するすべてのものがなければ意味がありません)。私たちのベンチマークは私にこれを与えます:

-------------------------------- SUMMARY (Read) -----------------------------------------------------------
Percentile   run1         run2         run3      % Variation
50:             0.16         0.16         0.21        17.15
90:             0.23         0.20         0.35        33.48
99:             0.46         0.43         0.78        35.19
99.7:           0.74         1.22         1.59        16.83
99.9:           1.52         1.85         2.84        26.06
worst:         36.46      5187.58       161.09        95.41
-------------------------------------------------------------------------------------------------------------------
-------------------------------- SUMMARY (Write) -----------------------------------------------------------
Percentile   run1         run2         run3      % Variation
50:             2.67         2.69         3.05         8.21
90:             3.02         2.95         3.97        18.75
99:             4.51         6.20         9.06        23.50
99.7:           5.86         9.28        15.55        31.07
99.9:         930.56        22.10       964.86        96.60
worst:       1357.31    226033.66    233373.70         2.12
-------------------------------------------------------------------------------------------------------------------

数値はマイクロ秒単位です。ベンチマーク コードはこちらhttps://github.com/OpenHFT/Chronicle-Map/blob/master/src/test/java/net/openhft/chronicle/map/perf/MapJLBHTest.java

そして、ほとんどの場合、Chronicle Map が ConcurrentHashMap よりも優れているという証拠がありましたが、マーシャリングがどれだけうまく実装されているかによって異なります。

とはいえ、ConcurrentHashMap の置き換えは、Chronicle Map の主なユース ケースではありません。

  • オフヒープ マップは、パフォーマンスを大幅に低下させることなく、ヒープ データ構造とは比較にならないほど大量のデータを格納できます。
  • 永続モードでは、複数のプロセス間で使用できます
  • ホスト間で複製可能
于 2020-11-19T14:52:01.207 に答える