問題タブ [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.

0 投票する
1 に答える
595 参照

java - Java WeakHashMap 参照が更新されていない

以下のコードでは、Pen オブジェクトを作成し、その色を白に初期化しています。Pen のコンストラクターで、フィールド「penColor」をコンストラクターに渡された値に設定した後、キーが「this ポインター (私の場合はペン)」である場所に保持しているグローバルな静的な弱いハッシュマップを更新します。 value は、KEY が文字列「penColor」であり、値が penColor メンバー フィールドへの参照である別の weakhashmap です。

次に、私のコードは Pen の setColor 関数を呼び出して Pen の色を更新します。この更新の後、weakhashmap で Pen オブジェクトの color フィールドを調べると、新しい色が反映されると思っていましたが、そうではありません。誰かがその理由を説明できますか?

0 投票する
7 に答える
20329 参照

java - WeakHashMapに相当するjava.util.concurrentはありますか?

Collections.synchronizedMap()次のコードは、並行性で正確性を維持しながら使用せずに書き直すことができますか?

つまり、代わりに使用できるjava.util.concurrentの何かがありますか?単に置き換えることに注意してください

明らかに機能しません

0 投票する
2 に答える
672 参照

java - WeakHashMap でメモリ使用量を減らす

WeakHashMap.htmlのJavadocで、それは言った

「WeakHashMap の各キー オブジェクトは、弱参照の参照対象として間接的に格納されます。したがって、キーは、マップの内側と外側の両方で、キーへの弱参照がガベージ コレクターによってクリアされた後にのみ、自動的に削除されます。」

その後

値オブジェクトは、WeakHashMap 自体を介してそのキーを間接的に参照する場合があることに注意してください。つまり、値オブジェクトは、関連する値オブジェクトが最初の値オブジェクトのキーを強く参照する他のキーオブジェクトを強く参照する場合があります。

しかし、WeakHashMap では Key と Value の両方を弱参照にするべきではないでしょうか? つまり、メモリが不足している場合、GC は値オブジェクトによって保持されているメモリを解放します (ほとんどの場合、値オブジェクトはキー オブジェクトよりも多くのメモリを使用する可能性が高いため)。

また、GC が Value オブジェクトを解放すると、Key オブジェクトも解放されるのでしょうか?

基本的に、メモリが少ないときにメモリ使用量を削減する HashMap を探しています (GC は必要に応じて値とキー オブジェクトを収集します)。

Javaで可能ですか?

ありがとうございました。

0 投票する
4 に答える
1625 参照

java - WeakHashMap で削除されたエントリに関連付けられた値を知る方法

私はこのようなものを持っています:

MyObj1キーは、GC が登場すると削除される可能性があり、それへの強い参照はありません。

削除されたキーに関連付けられた特定のマップ値オブジェクトに渡したいcheckThis(MyObj2)(おそらくReferenceQueue?)

これをコードに入れる方法がわかりません。

0 投票する
4 に答える
1847 参照

java - MapMakerまたはWeakHashMapsを使用すると便利な場合、誰かが私に説明できますか?

Google Guava(Collections)のMapMakerが本当に好きな人をたくさん読んだことがありますが、それをうまく利用することはできません。

javadocを読みましたが、ConcurrentHashMapのように動作すると書かれています。また、ほとんどの場合、 WeakHashMapnew MapMaker().weakKeys().makeMap()のドロップイン代替として使用できるとも述べています。

ただし、 ConcurrentHashMapWeakHashMapのjavadocsを読むと、いつ使用すると便利か疑問に思います。あなたが地図に置いたものがそこにあるという保証はないように私には思えますか、それとも私は誤解しましたか?

0 投票する
1 に答える
1995 参照

java - Guava MapMaker().weakKeys().makeMap() vs WeakHashMap

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

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

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

0 投票する
2 に答える
1264 参照

java - Java:WeakHashMapについてアドバイスする必要があります

私はWeakHashMapを使ってある種のキャッシュを作ろうとしている別の人だと思います。そして、私はそれについていくらかの助けが必要です。

TrackDataオーディオトラックに関する情報を含むオブジェクトがたくさんあります。次に、内部Trackを参照し続けるオブジェクトがあります。TrackData複数のトラックが同じを指すことができますTrackData。次にTrackDataCache、次のようなクラスがあります。

したがって、トラックをロードするときに呼び出しTrackDataCache.cache()、そのトラックデータが以前にロードされていない場合は、キャッシュされるか、キャッシュされたコピーに置き換えられます(TrackDataequals()メソッドをオーバーライドして場所とサブソングインデックスを確認します)。トラックを削除するときに気にする必要がないように、弱参照を使用したいと思います。

WeakHashMapでキーへの弱参照を保持するのは大丈夫かどうかを尋ねたかったのですが、そうでない場合は、この問題にどのように対処すればよいですか?弱参照とキャッシュされた値の一定時間の取得が必要です。私はWeakHashMapコードをコピーしてgetEntry()メソッドを公開することを考えていました。これで問題は解決しますが、それは非常に悪いハックです:(

PS。apacheまたはgoogleコレクションのいずれかにこのようなものがあることは理解していますが、2Mbの依存関係を追加したくありません。

0 投票する
8 に答える
101804 参照

java - WeakHashMapとは何ですか、いつ使用しますか?

とは何ですかWeakHashMap、いつ使用する必要がありますか?WeakHashMapaとaの違いは何HashMapですか?

0 投票する
4 に答える
2585 参照

java - Java Weak Hash Map-キーではなく、値の弱さに基づいてエントリを削除する必要があります

そのため、JavaWeakHashMapでは、キーが弱くなった場合にエントリが削除されるマップを作成できます。しかし、マップの値が弱くなったときにエントリが削除されるマップを作成するにはどうすればよいですか?マップを使用する理由は、IDに従ってオブジェクトを追跡するグローバルハッシュテーブルとして使用するためです。

(テキスト文字列はどこにありますかID

オブジェクトアドレスが弱くなったときに、それらを指す文字列ではなく、キーと値のペアを削除したいと思います。誰かこれについて何か考えはありますか?

0 投票する
5 に答える
2725 参照

java - WeakHashMap の keySet エントリは決して null ではありませんか?

WeakHashMap のキー セットを反復処理する場合、null 値をチェックする必要がありますか?

つまり、WeakHashMap の要素を反復処理中に収集できますか?

編集

この質問のためnullに、ハッシュマップにエントリが追加されていないと仮定できます。