我试图追踪我的游戏应用程序中的内存泄漏。该程序运行良好一次,但如果它反复运行并关闭,那么最终会遇到某种内存不足的错误。在尝试安装和理解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