2012-04-02 48 views
3

我試圖追蹤我的遊戲應用程序中的內存泄漏。該程序運行良好一次,但如果它反覆運行並關閉,那麼最終會遇到某種內存不足的錯誤。在嘗試安裝和理解eclipse的內存分析器之後,我終於生成了下面screengrab所示的數據。Interpereting eclipse的內存分析器的輸出

我的應用程序是基於一個單一的應用程序調用SD_globals像這樣:

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

和五個獨立的活動,每一個訪問的各種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數據,遊戲的重複實例看起來很奇怪。我的猜測是,也許不知何故,每次活動執行時都會重新創建新的活動,而不會被垃圾收集(我是對的嗎?)...如果是這樣,那會導致什麼樣的事情呢?

編輯:如果我完全偏離軌道約我的解釋,有什麼其他看起來很可疑的形象?

enter image description here

+1

您以前看過這個Google IO視頻嗎? http://www.youtube.com/watch?v=_CruQY55HOk我相信它會詳細解釋如何使用內存分析工具。我不記得在哪裏點擊,但我相信有一種方法可以讓每個對象看到哪個對象持有引用,因此不會收集它。應該在視頻中詳細介紹。 – Tim 2012-04-02 17:31:01

回答

1

SD_GamePlay$1SD_GamePlay$2和別人不SD_GamePlay類的實例。它只是SD_GamePlay課程中的匿名內部課程。 SD_GamePlay$MicksPanelThingSD_GamePlay$MicksThreadThingSD_GamePlay類中的非匿名內部類。

$的名稱解釋:https://stackoverflow.com/a/7484241/436938