这是关于Thread对象的android应用程序内存泄漏。
自从我启动android程序3年后,我还不知道代码是否导致内存泄漏。
Thread t = new Thread();
垃圾收集器未检测到。
问题是如何从vm内存中释放局部变量?
我决定试验
我在我的应用上创建了按钮代码的按钮。
for(int i=0;i<1000;i++)
{
Thread t = new Thread();
}
我预计局部变量t有一天会被解除分配。
我用调试模式执行它并打开E-clipse DDMS透视图。
我在我的Android设备(2.3.6)上选择我的应用程序线程,然后单击“更新堆”按钮
所以我可以检查堆大小并实时分配。
它的总堆大小为5.445MB,分配为2.779 MB。
然后我点击了生成1000个线程对象的按钮。
它改变了堆大小5.508MB并分配了3.058 MB。
如您所知,DDMS透视图上有“原因GC”按钮。
我点击了那个按钮。但分配的内存仍然是3.058MB。
我再次单击我的按钮以生成另外1000个线程对象。
我点击了无望的“Gause GC”按钮。
最终堆大小消失了大约20MB并导致内存不足。
如何发布Thread实例对象?
答案 0 :(得分:1)
答案 1 :(得分:0)
我没有Android设备来测试它,但我认为除了没有被任何变量引用之外,线程需要在它被垃圾收集之前死掉。
尝试启动循环中的线程,如下所示:
for(int i=0;i<1000;i++)
{
Thread t = new Thread();
t.start();
t = null;
}