2012-04-02 49 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