A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liumeng 中级黑马   /  2012-3-13 07:05  /  1792 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

调用finalize()一定进行垃圾回收么

2 个回复

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

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马