关于finalize的调用时机

think in java 中提到GC时,那是不是只要显式的调用了 System.GC() 就会触发 finalize呢?

 

例如:

 上述代码执行后,并不会调用finalize

 刚开始我不能理解,后来google到一位大牛feiyuegaoshan的解释,豁然开朗

 

原因是System.GC只是通知系统立刻进行GC操作,至于GC是否回收对象,只有GC自己说了算,

而且GC是相当有智商和情商的,在上述代码的情况下,

GC发现了对象引用t,它引用了Test对象,也就是说GC认为Test对象还有人用,因此不予清理

 

那如何让GC清理呢?只要对象没有人引用就可以了,例如:

 

只要把对象引用t置空,再用System.GC通知GC开始回收,GC会发现Test对象已经没有人使用了,

就会开始清理,同时触发了finalize方法。

 


 

那假设我没有显式的返回对象引用,只是new对象出来,例如:

把 Test t = new Test(); 换成 new Test();,GC会怎么考虑呢?

答案是GC认为这东西没人用 :)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值