6

ソケットを介して Protocol Buffers を使用してノード ツリーを取得する Scala サーバーがあり、各ノードに追加のデータをアタッチする必要があります。

シングル スレッド コンテキストで、ノード ツリーと関連データの両方で強い参照が同時に削除される場合 (スコープ外になるため)、WeakHashMap を使用するよりも Google Guava の MapMaker を weakKeys() で使用する理由はありますか? ? MapMaker では同期アクセスに料金がかかるようですが、この場合は必要ありません。

余談ですが、MapMaker が等価設定へのアクセスを許可し、弱い参照やソフト参照を気にせずに参照の等価性を選択できるようにすると便利です。

4

1 に答える 1

6

の重大な欠点の 1 つWeakHashMapは、それが「アイデンティティ マップ」ではないことです。つまり、キーに ( andではなく) equals()andを使用しますが、これは弱いキーには意味がありません。このバグを回避するには、キーのメソッドで ID の等価性を使用するようにします。hashCode==identityHashCodeequals

于 2010-11-20T07:41:43.923 に答える