2012-04-02 4 views
3

私のゲームアプリケーションでメモリリークをトレースしようとしています。プログラムは一度正常に実行されますが、実行され、繰り返し閉じられると、最終的には何らかの種類のメモリエラーが発生します。 eclipseのメモリアナライザーをインストールして理解しようとしたことで大失敗した後、私は最終的に以下のscreengrabに示されたデータを作成しました。 SD_Globalsで宣言されたグローバルデータのさまざまなアクセス権を持っているそれぞれのeclipseのメモリアナライザーの出力を解釈する

public class SD_Globals extends Application 
{ 
    int example_global_data = 99; 
    // stuff 
} 

と5つの別々の活動、:

私のアプリはそうのようなSD_globalsという単一のアプリケーションに基づいています。例えば活動の一つがとても似SD_gameplayです:

public class SD_GamePlay extends Activity implements View.OnClickListener 
{ 
    SD_Globals gs; // gs stands for global state 

    gs = ((SD_Globals)getApplicationContext()); 

    // now I can access global variable using code like this: 
    int x = gs.example_global_data; 
} 

のscreengrab内のデータを見ると、ゲームプレイの繰り返しインスタンスが奇数になります。私の推測では、ガベージコレクションを行わずにアクティビティが実行されるたびに、何とか新しいアクティビティが新たに作成されていると思います(そうでしょうか?)もしそうなら、それはどのようなものでしょうか?

EDIT:私は私の解釈についてオフトラック完全だ場合は、画像内の疑わしい他何はありますか?

enter image description here

+1

これまでにGoogle IOのビデオを見ましたか? http://www.youtube.com/watch?v=_CruQY55HOk私は、メモリアナライザツールの使い方を詳しく説明していると思います。クリックする場所は正確には思い出せませんが、そこにある各オブジェクトがどのオブジェクトがそのオブジェクトへの参照を保持しているかを知る方法があると考えています。ビデオで詳しく説明してください。 – Tim

答えて

1

SD_GamePlay$1SD_GamePlay$2などSD_GamePlayクラスのインスタンスではありません。 SD_GamePlayクラスの匿名の内部クラスです。 SD_GamePlay$MicksPanelThingおよびSD_GamePlay$MicksThreadThingは、SD_GamePlayクラスの非匿名の内部クラスです。

$の名前の説明:https://stackoverflow.com/a/7484241/436938

関連する問題