System.gc和System.runFinalization区别

(1)System.gc();

//告诉垃圾收集器打算进行垃圾收集,而垃圾收集器进不进行收集是不确定的

new Chair();  
        System.gc(); 这个不一定会执行Chair对象的finalize方法   你可以这样测试

        while(true){
            System.gc();
        }

这样执行会看到Chaeir对象执行他的finalize方法

(2)System.runFinalization();

//强制调用已经失去引用的对象的finalize方法

这样使用

     System.gc();
     System.runFinalization();

要在runFinalization之前执行gc();


总结:

finaliztion是个可以被应用层重载的函数,当GC回收一个对象时,它会先调用对象的这个函数然后再处理其它事情。

所以应用可以重载这个函数,去做一下想在GC前收尾的工作

前者是把占了内存但是没有利用,同时没有被垃圾回收机制处理的对象尽可能的处理掉。

后者是强制垃圾回收机制尽可能的回收没有被利用的对象,以释放出其占用的内存。

上一篇:final finally finalize区别


下一篇:close,析构函数和finalize:Java矛盾