finalize方法的使用

gc只负责回收堆内存中的对象,不会回收任何物理资源(例如数据库连接和网络IO等);程序无法精确控制垃圾回收,就算调用了System.gc()也一样只是通知程序可以进行垃圾回收,但是日期还是不确定的,只是会尽快回收垃圾,垃圾回收之前一般会调用finalize方法。对象一般有三种状态,可达,可恢复,不可达。可达不用说了,可恢复即回收对象之前调用finalize方法重新让一个引用变量引用这个对象。则此对象会再次变为可达状态,否则就不可达。注意:永远不要主动调用finalize方法,应该留给垃圾回收机制调用,而且具有不确定性,finalize可以使一个对象重新可达,此方法出现异常时,垃圾回收机制不会报告异常,程序继续执行。方法来自Object,protected void finalize()throw Throwable。

public class test{

. .private static test t=null;

. .public void info(){System.out.pritln("asd");}

. .public static void main(){

..      .. new test(); System.gc();

.. ..Thread.sleep(2000);//假如没有这一行,调用下面的方法就会异常,因为执行了gc后并未立马进行垃圾回收使得ft重新在finalize里可达,停止两秒后以让程序执行ft=this代码

.. ..//当然上面的sleep可以不用,改为System.runFinalization()有同样效果,即强制垃圾回收机制调用finalize方法以使ft可达。

.        .ft.info();

..    ..}

public void finalize(){ft=this;]//重新变成可达对象。



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值