4

java.util HashMap で OOM の問題が発生しているため、標準の Java Hashmap に代わるメモリに優しい HashMap を探しています。私はTroveを試してみましたが、少し改善されましたが、それでも時々OOMになってしまいます. メモリが効率的であれば、多少の速度低下に対応できます。

私はDBを探していません。ファイルベースの HashMap 実装も、オフラインで作業している限り問題ありません。int や byte などのプリミティブを格納しています。

また、経験があれば、記憶力がどの程度向上したかを示してください.

4

2 に答える 2

5

あなたに適した 2 つのオプションを考えることができます。どちらが最適かは、アプリケーションによって異なります。1 つ目は、WeakReference または SoftReference を使用することです。Android 2.3 の時点で、VM はより積極的になったため、VM を収集すると、これらのタイプの参照がより頻繁に収集される可能性があることに注意してください。個人的には、この唯一の理由でこれらのタイプの参照を使用することはあまり好きではありませんが、一部の人は別の主張をするかもしれません. 私が推奨する 2 番目のオプションは、LRU キャッシュを調べることです。LinkedHashMap を使用して、独自の LRU キャッシュを実装できます。しかし、ビットマップを保存するためにマップを使用している場合は、ビットマップ キャッシュを含む Android 互換パッケージによって提供されるビットマップ キャッシュを確認することを強くお勧めします。以下に、詳細を読むために使用できるいくつかのリンクを示します。

弱参照

ソフト参照

LinkedHashMap を使用した LRU キャッシュ

Android ビットマップ キャッシュと、弱い/ソフト参照を避けるべき理由

于 2012-06-01T01:54:39.223 に答える
4

ArrayMapSparseArrayを見てください。これらは、Android で HashMap を使用するためのメモリ効率の良い代替手段です。

于 2015-08-17T06:55:04.150 に答える