web-dev-qa-db-ja.com

GC_FOR_ALLOCの発生を最小限に抑える方法は?

私のアプリケーションは、これらの恐ろしいGC_FOR_ALLOCを特定の場所(メソッド)で何度も発生させています。

12-29 22:20:30.229: D/dalvikvm(10592): GC_FOR_ALLOC freed 1105K, 14% free 10933K/12615K, paused 33ms, total 34ms
12-29 22:20:30.260: D/dalvikvm(10592): GC_FOR_ALLOC freed 337K, 13% free 11055K/12615K, paused 25ms, total 26ms
12-29 22:20:30.288: D/dalvikvm(10592): GC_FOR_ALLOC freed 278K, 14% free 10951K/12615K, paused 24ms, total 24ms
12-29 22:20:30.495: D/dalvikvm(10592): GC_CONCURRENT freed 633K, 11% free 11317K/12615K, paused 16ms+3ms, total 79ms
12-29 22:20:30.495: D/dalvikvm(10592): WAIT_FOR_CONCURRENT_GC blocked 16ms
12-29 22:20:30.499: D/dalvikvm(10592): WAIT_FOR_CONCURRENT_GC blocked 15ms

私がメモリ管理に関して何か間違ったことをしていることは明らかです(そうです、ガベージコレクションは素晴らしいですが、それでもいつどのように割り当てるかを知る責任から私を解放することはできません)。

トラブルシューティングのアプローチまたは手法をお勧めしますか?

19
srf

EclipseのAndroid開発ツール)の一部であるAndroid DDMSには、プロファイリングとメモリ割り当ての追跡に使用できる非常に便利なツールがあります。

以下のスクリーンショットは、これらのツールの一部(すべてDDMSの下)を示しています。一部のツールは、左側のパネルの対応するボタン(赤で強調表示)をクリックしてアクティブ化する必要があり、右側のパネルに値(グラフ付きの一部)が表示されます。見たいタブを選択する(青で強調表示)

ヒープと割り当てトラッカーは、あなたの場合に非常に役立ちます。

Eclipse screenshot showing profiling and memory allocation tools

55
iTech