2

Dalvik のメモリ断片化の処理方法を教えてください。たとえば、アプリに小さなメモリを割り当てているとします。しかし、それらのいくつかを解放してから、後で大きなチャンクを割り当てようとします。ヒープにすべての「穴」がある場合、Dalvik はどのようにそのような要求を処理できますか?

logcat からこれを理解するのに助けが必要です:

11-15 02:50:21.837 D/dalvikvm(  990): GC_BEFORE_OOM freed 16K, 40% free 9830K/16384K, paused 90ms, total 90ms
11-15 02:50:21.837 E/dalvikvm-heap(  990): Out of memory on a 5032864-byte allocation. 

私のアプリケーションは 16384K のうち 9830K を使用していると言われました。そして、16M が最大ヒープ サイズであることを理解しています。これ以上大きくすることはできません。

しかし、これで 6554K は空くはずです (16384K - 9830K)。dalvik が「5032864 バイトの割り当てでメモリ不足」と言う理由。それは私が残したものよりも小さい 4914K です。

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

4

2 に答える 2

-1

これを見てください。dalvik メモリの断片化を処理する方法を理解するのに役立つかもしれません

リンク1

于 2012-11-15T19:53:17.850 に答える
-2

ガベージコレクター(GC)のほとんどの実装と同様に、Dalvik / JavaのGCは二重参照を使用します。メモリ内の参照変数は、オブジェクトを直接指すのではなく、最終的に個々のオブジェクトを指す2番目の参照を指します。したがって、アプリケーションが大きなメモリ割り当てを必要とする場合、Javaによって割り当てられたさまざまな参照変数に影響を与えることなく、GCはメモリ割り当てを自由に移動し、穴を融合します。

于 2012-11-15T19:58:37.097 に答える