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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 琚臻臻 黑马帝   /  2011-7-18 14:22  /  4267 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当某个对象不再有变量引用它,就会进入去活状态,系统用调用finalize方法进行资源管理。但是系统有时候会无法通知回收时机,需要调用System.gc();方法进行通知强制回收,但是系统是在什么时间回收的呢?

评分

参与人数 1技术分 +1 收起 理由
admin + 1 新手报到

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-7-18 17:11:36
沙发
程序无法精确的控制Java垃圾回收的时机,但是我们依然可以强制系统进行垃圾回收,只是这种强制只是通知系统进行垃圾回收,至于系统什么时候回收依然不确定。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-21 16:19:25
藤椅
每个对象处于可触及(即有引用指向它)、可复活(不再引用指向它)以及不可触及三个状态,当进入到可复活状态时,垃圾回收期准备释放对象所占内存,而这之前先调用它的finalize()方法,它有可能是对象进入到可触及状态。如果执行完finalize()方法,对象没有进入可触及状态,垃圾回收期才会真正回收释放它占有的内存。

但是可复活状态的对象,垃圾回收器执行finalize()方法后什么时候能够转到不可触及状态以及回收内存都是透明的。

就好像:居民只把垃圾放到指定地方,等待清洁工人收走,但是垃圾什么时候收走居民是不知道的。

垃圾回收器作为低优先级的线程,程序无法迫使它立即执行垃圾回收操作。我们调用System.gc()方法或者Runtime.gc()通知强制回收,但是也不能保证就立即执行回收,也不能保证一定会执行垃圾回收操作。

这好像:当小区垃圾成堆通知环保局令其立即清扫垃圾,我们只能催促他们,增加尽快清理垃圾的可能性,但是仍有可能清洁工人很久之后才来或者一直没来清扫。

评分

参与人数 1技术分 +2 收起 理由
admin + 2 不错!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-22 00:13:02
板凳

调用时间

比如一个Persion类
新建 new person() 隐含对象
就会自动调用垃圾回收
回复 使用道具 举报
黑马网友  发表于 2011-7-22 01:03:44
报纸
Java中提供了一些和垃圾收集打交道的类,而且提供了一种强行执行垃圾收集的方法--调用System.gc(),但这同样是个不确定的方法。Java 中并不保证每次调用该方法就一定能够启动垃圾收集,它只不过会向JVM发出这样一个申请,到底是否真正执行垃圾收集,一切都是个未知数。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

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