2014-11-06 56 views
1

我想我需要一些幫助來理解垃圾收集,以及我知道垃圾收集清除那些誰沒有從現場線程的引用,所以例如我有一個類解碼圖像像這樣:瞭解垃圾收集在android

new ImageDecoder(MyImageView).Decode(); 

我是否需要保留對ImageDecoder類的引用並在稍後將其設爲null,否則每次調用MyImageView.setBackgroundResource(0)時都會回收; ?

或每當我創建一個類的引用和類添加噸棧,所以每當我做

MyClass aClass; 

    ... 

    aClass = null; 

那麼堆應該釋放從所有堆根據文章,類拿了,但是在我看來,它並沒有在現實生活中發生,那是如何工作的?

非常感謝;

回答

0

你不能在Java中進行控制,這裏同樣適用。指定aClass = null並不意味着GC將立即運行並釋放堆中的內存。當他認爲JVM內存不足並且創建新對象需要更多空間時,它會運行,然後它可能會運行,以防萬一我停止主線程並凍結您的應用程序。

Oracle Java GC Basics

+0

是的,但IM迫使它在DDMS這樣做 – Reza 2014-11-06 09:40:51

+0

見強迫或通過程序,當你喜歡跟隨 調用Runtime.getRuntime()GC()。 它不保證GC會運行。 – virendrao 2014-11-10 13:14:54