从 Java 9 开始,Object.finalize()
方法被标记为 deprecated。
原因
早在 Effective Java 第一版
中,作者就已经警告要避免依赖该方法。
一方面我们没办法知道对象在 F-Queue
中的顺序,另一方面我们没办法控制 GC 发生的时间。所以大部分依赖该方法来释放资源的方式是及其危险的!
要记住,一个对象如果已经被标记为该回收,那么该对象就不应被救活。
使用该方法回收资源的替代方式
使用 try-with-resources
代码块 和 AutoCloseable
接口来确保资源在代码块执行完毕之后被释放。
更灵活的方法
使用 PhantomReference
虚引用来实现在对象被回收时触发的动作。