Java 学习笔记

所有文章
📖 最新文章 transmittable-thread-local 库 JOOR 反射库 Lombok 库:为你减少样板代码 Slf4j 日志组件的使用 加速maven、gradle依赖下载
📖 Java 基础 安装 第一个程序 使用 UTF-8 编写代码 空值 null 正则表达式 线程 日期/时间 匿名类 枚举 ThreadLocal 线程本地变量 动态代理 jar 命令

Java finalize 方法


如果一个类实现了 finalize 方法,那么当类生成的对象要被垃圾回收时,会先执行该方法。

示例:

public class FinalizeTest {

    static  class Person {
        String name;

        @Override
        protected void finalize() throws Throwable {
            System.out.println("finalize " + name);
            super.finalize();
        }
    }


    public static void main(String[] args) {
        Person p = new Person();
        p.name = "ltt";
        p = null;  // 此后,p原先指向的Person对象会在某个时间被 gc 回收掉

        System.gc();  // 建议 JVM 进行 gc 操作,但不一定会进行 gc 操作
        System.runFinalization();  // 执行将要被销毁的对象的 finalize 方法
    }
}

运行结果:

finalize ltt

为了触发 gc行为,用了下面的代码:

System.gc();  // 建议 JVM 进行 gc 操作,但不一定会进行 gc 操作
System.runFinalization();  // 执行将要被销毁的对象的 finalize 方法

这个代码不保证一定会触发 gc 操作,但在这个示例中是有用的。

如果去掉这两行,Person 的 finalize 不会被触发。可能是因为进行结束可以直接清理内存,所以就不 gc 了。


( 本文完 )

文章目录