finalize 是基础类 java.lang.Object 的一个方法
在垃圾收集器将该对象清除出内存之前会先调用它的finalize方法(不能主动调用)
它的设计目的是保证对象在被垃圾收集前完成特定资源的回收
finalize 机制现在已经不推荐使用 并且在 JDK 9 开始被标记为 deprecated
开发中应尽量避免使用finalize 可能会导致内存泄露
对象分为三种状态
1)可触达的、可触及的
2)可复活的
意思就是对象的引用在某个方法中被设为null了 该对象本应被垃圾回收
但回收前会先调用finalize方法 在finalize方法中又给该对象赋值引用
那么垃圾回收就无法回收这个对象
3)不可触达的
public class TestMain{
public static TestMain ts;
public static void main(String[] args) throws Exception {
ts = new TestMain();
ts = null;
System.gc();
Thread.sleep(1000);
System.out.println(ts);
}
protected void finalize() throws Throwable{
System.out.println("finalize 方法执行");
//重新赋值 对象复活
ts = this;
}
}