避免使用终结方法(finalizer)

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

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

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

    终结方法会拉低性能。

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


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

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

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


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值