2014-11-06 57 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