問題タブ [weakhashmap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java WeakHashMap 参照が更新されていない
以下のコードでは、Pen オブジェクトを作成し、その色を白に初期化しています。Pen のコンストラクターで、フィールド「penColor」をコンストラクターに渡された値に設定した後、キーが「this ポインター (私の場合はペン)」である場所に保持しているグローバルな静的な弱いハッシュマップを更新します。 value は、KEY が文字列「penColor」であり、値が penColor メンバー フィールドへの参照である別の weakhashmap です。
次に、私のコードは Pen の setColor 関数を呼び出して Pen の色を更新します。この更新の後、weakhashmap で Pen オブジェクトの color フィールドを調べると、新しい色が反映されると思っていましたが、そうではありません。誰かがその理由を説明できますか?
java - WeakHashMapに相当するjava.util.concurrentはありますか?
Collections.synchronizedMap()
次のコードは、並行性で正確性を維持しながら使用せずに書き直すことができますか?
つまり、代わりに使用できるjava.util.concurrentの何かがありますか?単に置き換えることに注意してください
明らかに機能しません
java - WeakHashMap でメモリ使用量を減らす
WeakHashMap.htmlのJavadocで、それは言った
「WeakHashMap の各キー オブジェクトは、弱参照の参照対象として間接的に格納されます。したがって、キーは、マップの内側と外側の両方で、キーへの弱参照がガベージ コレクターによってクリアされた後にのみ、自動的に削除されます。」
その後
値オブジェクトは、WeakHashMap 自体を介してそのキーを間接的に参照する場合があることに注意してください。つまり、値オブジェクトは、関連する値オブジェクトが最初の値オブジェクトのキーを強く参照する他のキーオブジェクトを強く参照する場合があります。
しかし、WeakHashMap では Key と Value の両方を弱参照にするべきではないでしょうか? つまり、メモリが不足している場合、GC は値オブジェクトによって保持されているメモリを解放します (ほとんどの場合、値オブジェクトはキー オブジェクトよりも多くのメモリを使用する可能性が高いため)。
また、GC が Value オブジェクトを解放すると、Key オブジェクトも解放されるのでしょうか?
基本的に、メモリが少ないときにメモリ使用量を削減する HashMap を探しています (GC は必要に応じて値とキー オブジェクトを収集します)。
Javaで可能ですか?
ありがとうございました。
java - WeakHashMap で削除されたエントリに関連付けられた値を知る方法
私はこのようなものを持っています:
MyObj1
キーは、GC が登場すると削除される可能性があり、それへの強い参照はありません。
削除されたキーに関連付けられた特定のマップ値オブジェクトに渡したいcheckThis(MyObj2)
(おそらくReferenceQueue
?)
これをコードに入れる方法がわかりません。
java - MapMakerまたはWeakHashMapsを使用すると便利な場合、誰かが私に説明できますか?
Google Guava(Collections)のMapMakerが本当に好きな人をたくさん読んだことがありますが、それをうまく利用することはできません。
javadocを読みましたが、ConcurrentHashMapのように動作すると書かれています。また、ほとんどの場合、 WeakHashMapnew MapMaker().weakKeys().makeMap()
のドロップイン代替として使用できるとも述べています。
ただし、 ConcurrentHashMapとWeakHashMapのjavadocsを読むと、いつ使用すると便利か疑問に思います。あなたが地図に置いたものがそこにあるという保証はないように私には思えますか、それとも私は誤解しましたか?
java - Guava MapMaker().weakKeys().makeMap() vs WeakHashMap
ソケットを介して Protocol Buffers を使用してノード ツリーを取得する Scala サーバーがあり、各ノードに追加のデータをアタッチする必要があります。
シングル スレッド コンテキストで、ノード ツリーと関連データの両方で強い参照が同時に削除される場合 (スコープ外になるため)、WeakHashMap を使用するよりも Google Guava の MapMaker を weakKeys() で使用する理由はありますか? ? MapMaker では同期アクセスに料金がかかるようですが、この場合は必要ありません。
余談ですが、MapMaker が等価設定へのアクセスを許可し、弱い参照やソフト参照を気にせずに参照の等価性を選択できるようにすると便利です。
java - Java:WeakHashMapについてアドバイスする必要があります
私はWeakHashMapを使ってある種のキャッシュを作ろうとしている別の人だと思います。そして、私はそれについていくらかの助けが必要です。
TrackData
オーディオトラックに関する情報を含むオブジェクトがたくさんあります。次に、内部Track
を参照し続けるオブジェクトがあります。TrackData
複数のトラックが同じを指すことができますTrackData
。次にTrackDataCache
、次のようなクラスがあります。
したがって、トラックをロードするときに呼び出しTrackDataCache.cache()
、そのトラックデータが以前にロードされていない場合は、キャッシュされるか、キャッシュされたコピーに置き換えられます(TrackData
equals()メソッドをオーバーライドして場所とサブソングインデックスを確認します)。トラックを削除するときに気にする必要がないように、弱参照を使用したいと思います。
WeakHashMapでキーへの弱参照を保持するのは大丈夫かどうかを尋ねたかったのですが、そうでない場合は、この問題にどのように対処すればよいですか?弱参照とキャッシュされた値の一定時間の取得が必要です。私はWeakHashMapコードをコピーしてgetEntry()
メソッドを公開することを考えていました。これで問題は解決しますが、それは非常に悪いハックです:(
PS。apacheまたはgoogleコレクションのいずれかにこのようなものがあることは理解していますが、2Mbの依存関係を追加したくありません。
java - WeakHashMapとは何ですか、いつ使用しますか?
とは何ですかWeakHashMap
、いつ使用する必要がありますか?WeakHashMap
aとaの違いは何HashMap
ですか?
java - Java Weak Hash Map-キーではなく、値の弱さに基づいてエントリを削除する必要があります
そのため、JavaWeakHashMap
では、キーが弱くなった場合にエントリが削除されるマップを作成できます。しかし、マップの値が弱くなったときにエントリが削除されるマップを作成するにはどうすればよいですか?マップを使用する理由は、IDに従ってオブジェクトを追跡するグローバルハッシュテーブルとして使用するためです。
(テキスト文字列はどこにありますかID
)
オブジェクトアドレスが弱くなったときに、それらを指す文字列ではなく、キーと値のペアを削除したいと思います。誰かこれについて何か考えはありますか?
java - WeakHashMap の keySet エントリは決して null ではありませんか?
WeakHashMap のキー セットを反復処理する場合、null 値をチェックする必要がありますか?
つまり、WeakHashMap の要素を反復処理中に収集できますか?
編集
この質問のためnull
に、ハッシュマップにエントリが追加されていないと仮定できます。