我試圖追蹤我的遊戲應用程序中的內存泄漏。該程序運行良好一次,但如果它反覆運行並關閉,那麼最終會遇到某種內存不足的錯誤。在嘗試安裝和理解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數據,遊戲的重複實例看起來很奇怪。我的猜測是,也許不知何故,每次活動執行時都會重新創建新的活動,而不會被垃圾收集(我是對的嗎?)...如果是這樣,那會導致什麼樣的事情呢?
編輯:如果我完全偏離軌道約我的解釋,有什麼其他看起來很可疑的形象?
您以前看過這個Google IO視頻嗎? http://www.youtube.com/watch?v=_CruQY55HOk我相信它會詳細解釋如何使用內存分析工具。我不記得在哪裏點擊,但我相信有一種方法可以讓每個對象看到哪個對象持有引用,因此不會收集它。應該在視頻中詳細介紹。 – Tim 2012-04-02 17:31:01