2010-12-14 3 views
2

午後。Android DDMSと割り当てトラッキング - GCを引き起こす原因を特定する理由とその理由を確認する

私は通常の60 fpsでループするアンドロイド用の小さなOpenGLベースのアプリケーションを作っていて、さまざまな驚異的なことをしています。

私は自分のフレームレートに注目し、可能な限り最適化を図っています。私は最近、私のプログラムが時々実行されている間に少しの休止があることに気づいた。私は即座にガベージコレクタでLogCatを実行していると疑われましたが、fpsでのディップの周りには疑わしいGCがいくつか出現しました。

しかし、それが収集を引き起こしているのは私のアプリだとわかりません。

したがって、これらは、GCについての私の質問です:私はLogCatからログインし得るとき、それはPID(プロセスIDが含まれています)

1)と、ここで私が受ける典型的なGCの例です:?

12-14 14:52:40.647: DEBUG/dalvikvm(492): GC_EXPLICIT freed 3831 objects/203576 bytes in 32ms 

492はPIDです。このPIDはGCを実行するプロセスになるのでしょうか?それとも、GCを必要とする電話で実行されているプロセスですか?例えば

同じセッションから、ここでLog.debugを使用して私のアプリからのログです:

12-14 13:50:42.717: DEBUG/Curve(2298): LIFECYCLE - OnStart 

PID私のアプリのためには、それが2298.あり、492ではない、これはGCが原因ではなかった意味しています私のアプリに?

割り振りトラッカーを使用すると、割り振りがほとんど発生しません。いくつかの文字列が生成され、ユーザのプレスで時折Rectが生成されるような数行のロギング(これは一度だけ割り当てられるように固定されています...) GCの必要性

2)私のアプリが割り振られていないのであれば、それは私のアプリにまったく影響を及ぼしてくれるはずです。

3)私はddmsを使用して実際にGCを引き起こしていますか?

4)割り当てトラッカーを調べると、自分が実行しているコードから来ていないエントリがいくつかあります。 1つはスレッド統計に関連していましたが、これはddmsですか?

申し訳ありませんが、実際にはいくつかの質問がありますが、実際にLogcatに表示されているGCログが実際には自分のアプリケーションかどうかに関係しています。

私の携帯電話は私のアプリケーションを実行していないと座っていることを念頭に置いて、私はまだ小さなGCの5から15秒を取得しています。これらは通常33msの間実行され、かなり少量のメモリのようです。だから私はこれは彼らが私のせいではないことを意味すると思います。 - やはり基本的にPIDとそれが示すものについて。

答えて

3

あなたは1)で正しいです。 GCのサブセットだけがあなたのアプリに属し、あなたのアプリのpidを持っています。

ほとんどの場合、問題はバックグラウンドサービスによるもので、小さな割り当てが必要なためです。私はあなたのゲームのフレーム間のデルタ時間にローパスフィルタを適用するか、よりスムーズな経験のために最大FPSを上限にすることをお勧めします。 iOS上であっても、最終的なしゃっくりなしに60FPSでゲームを走らせるのは極端に難しいです。

+0

ありがとう、私はちょうど私の心の中で少し軽い答えに書かれているものは何も見つかりませんでした。 – iexus

関連する問題