2009-05-01 13 views
12

私はAndroidにゲームを移植しています(多くのコードがあり、そのほとんどが私です)、DalvikVMはガベージコレクションについて(LogCatを通じて)教えています。コードのある時点で、「GC freeed x objects/x ms」というストリームが得られます。メッセージは基本的に〜150,000個のオブジェクトが削除されたことを通知しています。Android:作成されたオブジェクトのトラック番号

どこから来たのか知りたい!私は意図的に多くのオブジェクトを作成していないと確信しています。

だから、基本的にそのメッセージの反対を得る方法はありますか?任意のオブジェクトがのときにログメッセージを出力するもの

このようにしてコードをステップ実行し、生成されたメッセージの数を確認し、オブジェクトの生成コードの部分を確認することができます。私は、ループの一部でオブジェクト作成のいくつかの形を疑うが、可能であれば、これは確実に確かめる簡単な方法だろう。

私はEclipse 3.4.2を使用しています(該当する場合)。

アイデア?

+0

オブジェクトの新しいインスタンスを作成すると、メッセージをログに記録できませんか? –

+0

さて、ええ、私は_any_オブジェクトが作成されたときにメッセージを記録します。同じように、RectsやStringsや...何か。 – mcccclean

答えて

3

(Javaゲームを移植していると仮定して)Sun JVM上で既存のゲームコードをプロファイルしないのはなぜですか?その後、JProfiler、Yourkitなどを利用して、巨大なオブジェクトのセットがクリアされているかどうかを確認することができます。 (GCが実行されるタイミングを調べるには、-XX:+ PrintGCDetailsを使用してください)

ゲームに参加していないと判明した場合は、あなたのAndroidコードに。残念ながら私はあまり知らない。

8

これは、Android版(Eclipse版ではない)に付属するddmsツールを使用すると可能です。これを使用して、割り当てトラッカータブを見てください。すべてのオブジェクトの割り当てを、割り当てられた場所のスタックトレースと共に追跡することができます。しかし、このツールは情報の欠落を引き起こす可能性があり、必要な特定の情報は解析や検索が容易ではありません。 Sun JVM用のバージョンをお持ちの場合は、Kaiが言及したツールを使用することをお勧めします。 Androidでそれを行う必要がある場合は、割り当てトラッカーを使用して開始します。

関連する問題