一定の周期で画面がカクつきだした。
ググるとガベージコレクションが動作する際に処理が長時間ブロックされる、と。
ログをよく見ると確かにGCが頻繁にログをだしていたので、
こりゃいかんと eclipse でのメモリ確保状況を調べる事にチャレンジ。
以下備忘録兼ねて手順。
1.eclipseからデバッグしたいアプリを実行する
いつもの要領で。
2.DDMSパースペクティブを開く
レイアウトによりますが、とりあえずデフォルトだと右上のこいつ。
3.実行中デバイスのデバッグしたいスレッドを選択
Devices ビューに実行中のデバイス一覧が表示されています。
更にデバイスからスレッドの一覧が表示されているので、デバッグしたいスレッドを選択。
今回は「system_process」にします。
4.「Allocation Tracker」ビューの「Start Tracking」を選択
最初は何も表示されていないと思いますが、「Start Tracking」を押すと
メモリの監視が開始します。
5.「Allocation Tracker」ビューの「Get Allocations」を選択して結果を取得する
「Start Tracking」を押した以降のメモリの確保状況が出力されます。
確保されたクラス、サイズ、スレッドID、どのクラスのどのメソッドから、等かなり詳細に出ます。
更に良い事に、確保項目を選択すると、ビューの下半分に確保時のスタックトレースが表示されます。
今日はこれで大分助けられた。
今回の自分の場合は、テクスチャ描画時のコマンド引数用に
ローカル定義していた byte[] や float[] が大量にリストされており、そいつらの掃除のためにGCが頻繁に動いていました。
それらローカル変数をメンバ変数として、テクスチャ生成時から破棄時まで使いまわす形に修正したところ
目に見えてカクつきが抑えられました。ほんと良かった。
0 件のコメント:
コメントを投稿