私はゲームを実行しています。起動時に画像を画像の中にロードしますWeakHashMap
。ゲームを実行すると、RAM が増加し続け、最終的にはWeakHashMap
すべてのデータをアンロードします。これはガベージ コレクションに関連していますか? 解決策はありますか?
3 に答える
WeakReferences の代わりにSoftReferencesを使用して HashMap を作成できます- ガベージ コレクターはそれを GC することにあまり積極的ではありません。WeakHashMap ソース コードをコピーして、WeakReferences を SoftReferences に置き換えるだけです。
Louis Wasserman が示唆したように、これは予想される動作です。通常のハッシュマップが必要になると思います。http://docs.oracle.com/javase/6/docs/api/java/util/WeakHashMap.htmlにある WeakHashMap に関するドキュメントをお読みください。
Ajava.util.WeakHashMap
は、その説明が示唆するように、そのキーへの弱い参照のみを保持するタイプのマップです。ご存知のように、弱参照は、ガベージ コレクターが参照先オブジェクトを収集するのを妨げない参照です。オブジェクトがガベージ コレクションされないようにするには、オブジェクトへの強い参照をどこかに維持する必要があります。
データをガベージ コレクションから保護する場合は、通常のHashMap
. 特定のアプリケーションでは、画像へのソフト参照 (gc が常にクリアするのではなく、必要な場合にのみクリアする参照) を保持する独自のマップ実装を作成し、そのアートが失われたときに自動的に不足しているアートを読み込むようにしたい場合があります。を求めました。(ただし、すべてスレッドセーフにする必要がある場合は注意が必要です...)