我试图在我的游戏应用中追踪内存泄漏。该程序运行一次,但如果它反复运行和关闭,那么它最终会遇到某种不足的内存错误。经过多次尝试安装和理解eclipse的内存分析器后,我终于制作了下面的screengrab中显示的数据。
我的应用程序基于一个名为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中的数据,GamePlay的重复实例看起来很奇怪。我的猜测是,每次活动执行时都可能以某种方式重新创建新的活动而不进行垃圾收集(我是对的吗?)......如果是这样,那么什么样的事情可能导致这种情况?
编辑:如果我完全偏离我的解释,是否有任何 else 在图片中看起来可疑?
答案 0 :(得分:1)
SD_GamePlay$1
,SD_GamePlay$2
和其他人不是SD_GamePlay
类的实例。它只是SD_GamePlay
类中的匿名内部类。 SD_GamePlay$MicksPanelThing
和SD_GamePlay$MicksThreadThing
是SD_GamePlay
类中的非匿名内部类。