たとえば、多くの読み取り操作といくつかの書き込み操作があり、マップに配置されるオブジェクトは非常に「重い」-そのようなオブジェクトの初期化には多くのメモリ/時間がかかるなど.
並行ハッシュマップの高いパフォーマンスを利用し、キャッシュされたオブジェクトの不要な初期化のコストを最小限に抑えるには、どのようにコーディングすればよいでしょうか。
サンプル コード スニペットは大歓迎です。ありがとう!
たとえば、多くの読み取り操作といくつかの書き込み操作があり、マップに配置されるオブジェクトは非常に「重い」-そのようなオブジェクトの初期化には多くのメモリ/時間がかかるなど.
並行ハッシュマップの高いパフォーマンスを利用し、キャッシュされたオブジェクトの不要な初期化のコストを最小限に抑えるには、どのようにコーディングすればよいでしょうか。
サンプル コード スニペットは大歓迎です。ありがとう!
guavaが探しているものを正確に持っていることを確認してください。 MapMaker.makeComputingMapを参照してください。
ConcurrentHashMapのコードは高度に最適化されています。
更新がほとんどない場合、同時実行のオーバーヘッドは最小限に抑えられます。読み取り中に書き込み操作が発生した場合、内部状態の一時的なコピーが作成されるときにオーバーヘッドが発生しますが、それ以外のパフォーマンスの違いは無視できます。提供されたクラスをそのまま使用し、パフォーマンスの問題が発生していることがわかった場合にのみ、別のものを使用することを検討します。
初期化コストは同時実行パフォーマンスには関係なく、マップに追加する操作のみが関係することに注意してください。
要件によって異なりますがPool
、インスタンス化の数を減らすためにインスタンスの使用を検討することもできます。これにより、現在マップからアイテムをダンプしてガベージ コレクションを行っている場合にパフォーマンスが向上するため、GC の代わりにそれらをプールに戻し、後で再利用します。