黑马程序员技术交流社区

标题: 关于堆内存中实例变量什么时候消失的问题? [打印本页]

作者: 刘菲    时间: 2012-11-20 08:47
标题: 关于堆内存中实例变量什么时候消失的问题?
当堆内存中的对象和数组没有任何引用时,会在不定时间内被垃圾回收机制回收,
那么堆内存中的实例变量会在什么时候消失呢?
作者: 化小东    时间: 2012-11-20 09:02
实例变量的生命周期:当实例变量的引用丢失后,将被垃圾回收器列入可回收“名单”中,但并不是马上就释放堆中内存.

作者: 刘腾    时间: 2012-11-20 09:41
垃圾收集发生本身就有不可预知性:由于实现了不同的垃圾收集算法和采用了不同的收集机制,所以它有可能是定时发生,有可能是当出现系统空闲CPU资源时发生,也有可能是和原始的垃圾收集一样,等到内存消耗出现极限时发生,这与垃圾收集器的选择和具体的设置都有关系。
不要试图去假定垃圾收集发生的时间,这一切都是未知的。比如,方法中的一个临时对象在方法调用完毕后就变成了无用对象,这个时候它的内存就可以被释放。

Java中提供了一些和垃圾收集打交道的类,而且提供了一种强行执行垃圾收集的方法--调用System.gc(),但这同样是个不确定的方法。Java 中并不保证每次调用该方法就一定能够启动垃圾收集,它只不过会向JVM发出这样一个申请,到底是否真正执行垃圾收集,一切都是个未知数。

然后就是尽早释放无用对象的引用。大多数程序员在使用临时变量的时候,都是让引用变量在退出活动域(scope)后,自动设置为null,暗示垃圾收集器来收集该对象,还必须注意该引用的对象是否被监听,如果有,则要去掉监听器,然后再赋空值。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2