避免使用终结方法(finalizer)

本文探讨了Java中对象终结方法的不确定性和执行时机,并强调了显示关闭资源的重要性。终结方法适用于作为安全网来捕获遗漏的资源释放情况,或者用于没有关键资源的本地对等体。同时提醒开发者注意终结方法的性能影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    从一个对象变得不可到达,到它的终结方法被执行,所经历的时间是任意的。JVM会延迟执行终结方法。

    终结方法的执行是垃圾回收算法的一个主要功能,不同JVM的实现大相径庭。

    不应该使用终结方法来更新重要的持久状态。

    终结方法会拉低性能。

    提供显示的终止方法,如InputStream、OutputStream和java.sql.Connection的close方法。显示终止方法通常与try-finally结合使用。


终结方法的两种合法用途:

    1.当对象所有者 忘记调用前面段落中建议的显示终止方法时,终结方法可以充当安全网。如果终结方法发现资源未被终止时,应在日志中记录一条警告,这表示客户端代码中的一个bug。

    2.当本地对等体不具有关键资源时,可使用终结方法。当本地对等体具有关键资源时,应提供显示终止方法。(本地对等体是一个本地对象,普通对象通过本地方法委托给一个本地对象,其不同于普通对象,垃圾回收器不知道它。


注意:如果子类实现者覆盖了超类的终结方法,但是未手工调用超类的终结方法,那超类终结方法将永不被调用。因此,应记住调用super.finalizer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值