(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前收尾的工作
前者是把占了内存但是没有利用,同时没有被垃圾回收机制处理的对象尽可能的处理掉。
后者是强制垃圾回收机制尽可能的回收没有被利用的对象,以释放出其占用的内存。