Skip to content

finalize 方法


基本介绍

说明:实际开发中很少或者几乎不会重写 finalize 方法,更多的是应对面试考点

(1)当对象被回收时,系统会自动调用该对象的 finalize 方法。子类可以重写该方法,实现额外的资源释放操作(必然:释放资源,数据库连接,或者打开文件......)

(2)什么时被回收:当一个对象没有任何引用时,则 JVM 认为该对象不再是一个可达对象。该对象将被垃圾回收器回收,在回收对象时,会调用 finalize 方法

(3)对象回收机制的调用,是在系统决定对象已没有引用后自动完成的。通过调用 System.gc() 主动触发垃圾回收机制

补充说明

(1)垃圾回收会在 JVM 内存使用达到某个阈值自动进行。调用 System.gc( ) 可以请求 JVM 进行垃圾回收,但这只是一个建议,JVM 不一定会立即执行垃圾回收操作

(2)手动触发垃圾回收并不推荐,因为 JVM 通常能够自动选择最佳时机来执行垃圾回收。过度干预垃圾回收可能会影响性能

代码示例

java
public class finalize {
    public static void main(String[] args) {
        finals finals = new finals(18);
        finals = null;
        // 主动触发垃圾回收机制,回收对象会调用 finalize()方法
        System.gc();
    }
}
class finals{
    int age;

    public finals(){

    }

    public finals(int age) {
        this.age = age;
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("调用finalize回收对象");
    }
}

// 输出
调用finalize回收对象

代码分析

(1)使用 alt + insert 重写 finalize 方法

(2)使用 System.gc( ) 主动触发垃圾回收机制,进而验证对象没有被引用时,默认调用 fianlize 方法实现垃圾回收机制