每个class 可以override 一个finalize()方法
这个方法有什么用呢?
perform the cleanup
上面是官方的描述
对的,只是perform,并不实际执行资源释放
只是留条路给你perform一些东西
这个方法是由garbage collector 调用的
调用的条件是:
garbage collection 认为你这个对象没有什么用了
而使garbage collector 活动又有条件:
1.JVM的资源不太够用了,需要释放一部分没有用的资源
2.调用System.gc() 方法,主动让JVM去释放资源
finalize()方法原本的描述是这样的:
Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
例:
class TT{
public void finalize() {
System.out.println("it will be desroyed");
}
}
public class Finalize {
public static void main(String[] args) {
TT a=new TT();
System.out.println("it is bulided");
a=null;
System.out.println("it got null now");
System.gc(); //call the JVM to take resource back
// and JVM invoke the finalize() to perform the cleanup
}
}
输出结果:
it is bulided
it got null now
it will be desroyed
不过,我发现,其实不只有=null 这一种方法
这个对象在之后没用了,一样可以使garbage collector 调用finalize()方法
例:
public class Finalize {
public static void main(String[] args) {
TT a=new TT();
System.out.println("it is bulided");
//a=null;
System.out.println("it got null now");
for(int i=0;i<10000000;i++);
System.gc(); //call the JVM to take resource back
// and JVM invoke the finalize() to perform the cleanup
}
}
输出结果:
it is bulided
it got null now
it will be desroyed
最后补充一点:
还有挺多类似finalize() 的方法
比如说,init(),destroy()
这些方法的主要意义就是perform
实际进行初始化,销毁操作的,并不是我们