黑马程序员技术交流社区

标题: 调用finalize()一定进行垃圾回收么 [打印本页]

作者: liumeng    时间: 2012-3-13 07:05
标题: 调用finalize()一定进行垃圾回收么
调用finalize()一定进行垃圾回收么
作者: 李爱军    时间: 2012-3-13 07:21
1:垃圾回收有两种启动方式:
a   当其感觉到内存不足时;
b:   程序通过System.gc()强迫启动。
2:finalize()这个方法的名字是语言内定的,但是其内容可以在类的定义时由程序员给出。它也有
两种启动方式:
a   当垃圾回收动作启动时会自动调用这个函数;
b:程序通过System.ruFinalization()强迫启动。
注意:
1.即使你手动调用System.gc(),jvm也不会立刻回收
2.finalize()的执行由gc决定,可以执行也可以不执行,所以不能用finalize()保证释放某些资源
3.一般来说只有内存不够了才会执行gc,所以一般的程序可能根本没有搜集垃圾
也就是说只有在jvm的内存不足时才会启动垃圾回收机制
作者: 黄奇耀    时间: 2012-3-13 09:28
当垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存.所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作.正常情况下,当某个对象被系统收集为无用信息的时候,finalize()将被自动调用,但是jvm不保证finalize()一定被调用,也就是说,finalize()的调用是不确定的,这也就是为什么sun不提倡使用finalize()的原因
finalize()在什么时候被调用?有三种情况
1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候.
2.程序退出时为每个对象调用一次finalize方法。
3.显式的调用finalize方法






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