這是關於線程對象的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