0

私はゲームを実行しています。起動時に画像を画像の中にロードしますWeakHashMap。ゲームを実行すると、RAM が増加し続け、最終的にはWeakHashMapすべてのデータをアンロードします。これはガベージ コレクションに関連していますか? 解決策はありますか?

4

3 に答える 3

1

WeakReferences の代わりにSoftReferencesを使用して HashMap を作成できます- ガベージ コレクターはそれを GC することにあまり積極的ではありません。WeakHashMap ソース コードをコピーして、WeakReferences を SoftReferences に置き換えるだけです。

于 2013-04-30T00:19:18.857 に答える
0

Louis Wasserman が示唆したように、これは予想される動作です。通常のハッシュマップが必要になると思います。http://docs.oracle.com/javase/6/docs/api/java/util/WeakHashMap.htmlにある WeakHashMap に関するドキュメントをお読みください。

于 2013-04-30T00:11:32.167 に答える
0

Ajava.util.WeakHashMapは、その説明が示唆するように、そのキーへの弱い参照のみを保持するタイプのマップです。ご存知のように、弱参照は、ガベージ コレクターが参照先オブジェクトを収集するのを妨げない参照です。オブジェクトがガベージ コレクションされないようにするには、オブジェクトへの強い参照をどこかに維持する必要があります。

データをガベージ コレクションから保護する場合は、通常のHashMap. 特定のアプリケーションでは、画像へのソフト参照 (gc が常にクリアするのではなく、必要な場合にのみクリアする参照) を保持する独自のマップ実装を作成し、そのアートが失われたときに自動的に不足しているアートを読み込むようにしたい場合があります。を求めました。(ただし、すべてスレッドセーフにする必要がある場合は注意が必要です...)

于 2013-04-30T00:51:02.237 に答える