5

Androidでアプリケーションを開発しています。これは、センサー データを継続的に処理する長時間実行されるアプリケーションです。アプリケーションの実行中に、logcat に多くの GC メッセージが表示されます。毎秒約1回。

これはおそらく、ループ内でオブジェクトが作成され、すぐに逆参照されるためです。

どのオブジェクトが作成され、すぐに解放されているかを調べるにはどうすればよいですか?

私が試したすべての Java ヒープ分析ツール (*) は、ヒープ上のオブジェクトの数とサイズに悩まされています。それらは便利ですが、一時的な短命オブジェクトが最も多く作成されるサイトを見つけることにもっと興味があります。

(*) やってみjcatましEclipse MATた。hatAndroid のヒープダンプを処理することができませんでした。サポートされていないダンプ ファイルのバージョンについて不平を言いました。

4

2 に答える 2

4

作成およびリリースされているオブジェクトをすぐに見つけるにはどうすればよいですか?

ステップ1:コードを一時的に変更します(またはコードの関連部分を使用してスクラッププロジェクトを作成します)。ここで、ボタンなどをクリックして、センサー処理ロジックを1回だけ実行できます。

ステップ2:DDMS(スタンドアロンまたはEclipseパースペクティブ)に入ります。

ステップ3:エミュレーターを選択し、[割り当てトラッカー]タブをクリックします

ステップ4:アプリケーションをステップ1のボタンクリックを待機するポイントに移動し、[DDMS割り当てトラッカー]タブで[追跡の開始]をクリックします。

ステップ4:ボタンをクリックし、センサー処理パスが完了したら、[DDMS割り当てトラッカー]タブの[割り当ての取得]をクリックします。

これにより、コードのその部分で何が割り当てられたかがわかります。GCサイクルが実行されるまでは不確定であるため、「リリース」されたものはわかりません。

編集

よくわかりませんがstartAllocCounting()android.os.Debugクラスでは[追跡の開始]ボタンをクリックした場合と同じ効果がある場合があります。その場合は、上記で概説したコードの変更をいじくり回すのではなく、ループの1つのパスで割り当てを追跡するようにコードをインストルメント化するだけで済みます。

そして、FWIW、ここにDDMSと割り当て追跡に関する短い技術記事があります。

于 2010-12-27T12:37:43.807 に答える
1

アロケーショントラッカーを試してみる必要があると思います:)

(/ toolsディレクトリ内)

http://developer.android.com/resources/articles/track-mem.html

于 2010-12-27T12:39:38.527 に答える