【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("对象即将被销毁");
}
}