【Java】finalize()方法的使用

304 阅读1分钟

【Java】finalize()方法的使用

finalize()方法

finalize()方法是Object类提供的方法,在GC(垃圾回收器)准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。其在Object中定义如下:

protected void finalize() throws Throwable { }

调用时机

在java中,由于垃圾回收器(GC)的机制是自动回收,所以垃圾回收的时机具有不确定性,finallize()也可能自始自终都不被调用。

用途

这个函数一般用于关闭非java资源(如文件,数据库连接池等),也用于关闭java语言调用其他语言(如c语言等)而产生的内存空间。

尽量避免使用这个函数

垃圾回收具有不确定性,也大有可能在资源耗尽前无法执行这个函数,因而最好手动调用的显示的close()方法。

示例

定义一个类Person,重写Object类的finalize()方法,在对象被销毁前将执行这个方法,将“对象即将被销毁”打印到控制台。在默认情况下,通过System.gc()或Runtime.getRuntime()的调用,会显示的触发FullGC,同时对老年代和新生代进行回收,会尝试释放掉被丢弃对象占用的内存。但是也不一定成功,只能说增大了对象被会回收的概率。

public class FinalizeDemo {
    public static void main(String[] args) {
        for (int j = 0; j < 100000; j++) {
            Person person = new Person();
            person=null;
            /**
             * 增大概率*/
            System.gc();
        }
    }
}
class Person{
    /**
     * 有概率回收。
     * 垃圾回收前自动调用此方法。*/
    @Override
    protected void finalize(){
        System.out.println("对象即将被销毁");
    }
}