这是关于线程对象的android应用程序内存泄漏。Android内存泄漏新线程()
我不知道下面的代码导致内存泄漏,因为我开始了3年的android程序。
Thread t = new Thread();
t不被垃圾收集器检测到。
问题是我如何从vm内存释放局部变量t?
我决定尝试
我做了我的应用程序,它的行为是下面的代码按钮。
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实例对象?
在大多数情况下,最好使用Executor而不是线程。如果你使用类似cachedThreadPool的东西,它会为你处理活动的线程。 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Executor.html – Jave 2012-03-29 08:22:12