6

Dalvik VMをインストルメント化していますが、dalvikのガベージコレクションを分析するためのツールがあるかどうかを知りたいです。アロケーショントラッカーについては知っていますが、もっと手の込んだものを探しています。

4

1 に答える 1

0

時間の経過に伴うすべての GC 操作のログを取得します。

GC が発生するたびに、LogCat に行が表示されます。

08-08 16:42:21.998: D/dalvikvm(26942): GC_CONCURRENT freed 773K, 26% free 4739K/6368K, paused 4ms+3ms, total 92ms
08-08 16:42:21.998: D/dalvikvm(26942): WAIT_FOR_CONCURRENT_GC blocked 11ms

デバイス上のすべてのアプリでそれらを取得しているようです。

この行には、解放されたメモリの量、GC にかかった時間、正確に発生した時間、ヒープのサイズ (使用済み/合計) など、GC に関する多くの興味深い統計が含まれています。

これらのログ行にはすべてタグが付いているdalvikvmため、長期間にわたってそれらを収集してフィルタリングし、分析して GC の動作について知ることができるはずです。

GC の特定の実行の分析:

ある特定の GC 操作で何が起こるかを分析したい場合、最適なツールは Eclipse MAT です。Eclipse MAT はヒープ ダンプを解析できます。ヒープ スナップショットを作成し、GC を待機して (または DDMS を使用して自分でトリガーして)、別のスナップショットを作成します。

Eclipse MAT は、2 つのスナップショット間の差分を表示できます。新しい割り当てと GC による割り当て解除の両方が表示されることに注意してください。スナップショットの比較の詳細については、こちらを参照してください。

その他の考え:

GC プロセスの分析からどれだけ学べるかわかりません。GC の内部動作は実装の詳細です。OS のバージョン / デバイス / 構成によって予告なく変更される場合があります。

私はあなたが経験している GC レイテンシーを改善する方法を考えようとしています.. GC は通常、メモリ状態が低いときに実行されるようです。これはおそらく新しい割り当て中に発生するため、サービスがアクティブなときに GC が実行されている可能性があります。おそらく、サービスがアクティブでない時間を手動で GC に使用すると、Web リクエストに応答するクリティカル パスで発生する GC の数を減らすことができるでしょう。それを試すには、単純なバックグラウンド タイマーを追加し、サービスがアクティブになるたびにリセットします (新しい要求)。タイマーがカチカチ音をたてると (一定時間非アクティブ)、System.gc()手動で実行します。

于 2013-08-08T14:48:35.377 に答える