最も重要な
メモリの最適化を探している場合、最も重要な手順は、logcat
ガベージコレクタに関連するメッセージを確認することです。似たようなもの:
12-01 19:12:09.138: D/dalvikvm(31828): GC_CONCURRENT freed 158K, 3% free 10259K/10503K, paused 15ms+0ms, total 19ms
最初の値はこの実行でGCによって解放された量であり、2番目の値はアプリで使用されている量であり、3番目の値はアプリに割り当てられた量です。この最後の値は、割り当てられたメモリがシステムで許可されている最大量に達し、アプリが強制終了されるまで、アプリがメモリを増やす必要があるときに大きくなります。Honey Comb
より多くの値が必要になる前のSDK 。これはDalvik Vm
、通常はBitmap
オブジェクトによって外部で使用されるメモリです。
したがって、最も重要なテストは、アプリをしばらく使用して、使用済み/割り当て済みメモリの値が安定しているか、継続的に増加しているかどうかを確認することによって行われます。
それが安定している場合は、分析が完了し、コーヒーを飲みに行くことができます:-)
それは増え続けます、そして多分あなたの記憶がどこに行くのかをチェックし始める方が良いでしょう...
何をすべきか
メモリを適切に使用するための最も基本的な適切なルールは、不要になったオブジェクトを解放(無効化)することです。これはほとんどの非静的オブジェクトに対して自動的に行われるため、主にオブジェクトに焦点を合わせ、static
不要なときにnullを割り当てるようにする必要があります。
トリッキーなもの
メモリリークの最も一般的な理由は、静的オブジェクトが適切に管理されておらず、以下への参照を保持していることです。
- コンテクスト
- ビュー(コンテキスト(および場合によってはビットマップ)への参照を保持します)
- スレッド(GCによって簡単に収集されない)
- ハンドラー(コンテキストへの参照を保持します)
- BitMap(主にHoney Combより前のバージョンで、GCはそれらを収集するのにそれほど効果的ではありませんでした)
ファイナルノート
1時間かかる場合は、PatrickDubroyがMATを使用してメモリリークを特定する方法を説明しているGoogleIO 2011の動画をご覧ください:Google I / O 2011:Androidアプリのメモリ管理。
これは、アプリでメモリ調整を開始するのに本当に役立ちました。
よろしく。