本文共 1408 字,大约阅读时间需要 4 分钟。
每个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
实际进行初始化,销毁操作的,并不是我们
转载地址:http://hoiyb.baihongyu.com/