java终结器
JDK-8165641 (“ Deprecate Object.finalize”)已打开,以“ deprecate Object.finalize() ”,因为“ finalizer本质上存在问题,使用finalizer可能会导致性能问题,死锁,挂起和其他问题行为”,并且因为“终结的时间无法预测,无法保证将调用终结器。” 我最近在Java的Finalizer仍然存在的文章中体验并写了使用Object.finalize()
一些令人讨厌的后果。
在消息RFR 9:8165641:Deprecate Object.finalize中 ,Roger Riggs邀请对与此问题相关的更改进行回顾和评论[150行,其中包括在java.lang.Object.finalize()
添加@Deprecated
以及许多附加功能当前JDK类的Object.finalize()
方法实现上的@SuppressWarnings(“ deprecation”)批注]。
建议为Object.finalize()
方法添加Javadoc @deprecated
文本,以重述JDK-8165641和Roger Riggs消息中包含的描述性信息。 这包括为“实例拥有非堆资源的类”“适当地实现java.lang.AutoCloseable”的建议,以及“提供一种显式释放那些资源的方法”的建议。 描述性信息还指出:“ {@link java.lang.ref.Cleaner }和{@link java.lang.ref.PhantomReference }提供了一种更灵活,更有效的方法来在对象变得不可访问时释放资源。” 有关JDK 9引入的java.lang.ref.Cleaner的更多背景信息,请参见JDK-8138696 。 自从不赞成使用方法[ @Deprecated(since="9")
] @Deprecated(since="9")
, Object.finalize()
的弃用包括增强的@Deprecated
注释,以声明状态。
尽管建议的弃用Object.finalize()
不会删除使用Java终结器的功能或减少其任何潜在的负面影响,但它至少会提供关于使用该方法的风险的更加明显的警告,并且当前已记录,提供了更好的潜在替代方案。
翻译自: https://www.javacodegeeks.com/2017/03/deprecating-javas-finalizer.html
java终结器