4. 弃用使用 finalize() 方法,及其替代方法

2019-03-14  本文已影响0人  42cc8919e42f

从 Java 9 开始,Object.finalize() 方法被标记为 deprecated。

原因

早在 Effective Java 第一版 中,作者就已经警告要避免依赖该方法。
一方面我们没办法知道对象在 F-Queue 中的顺序,另一方面我们没办法控制 GC 发生的时间。所以大部分依赖该方法来释放资源的方式是及其危险的!
要记住,一个对象如果已经被标记为该回收,那么该对象就不应被救活。

使用该方法回收资源的替代方式

使用 try-with-resources 代码块 和 AutoCloseable 接口来确保资源在代码块执行完毕之后被释放。

更灵活的方法

使用 PhantomReference 虚引用来实现在对象被回收时触发的动作。

上一篇 下一篇

猜你喜欢

热点阅读