1.垃圾回收器(garbage colector)決定回收某對(duì)象時(shí),就會(huì)運(yùn)行該對(duì)象的finalize()方法;
finalize是Object類的一個(gè)方法,該方法在Object類中的聲明protected void finalize() throws Throwable { }在垃圾回收器執(zhí)行時(shí)會(huì)調(diào)用被回收對(duì)象的finalize()方法,可以覆蓋此方法來(lái)實(shí)現(xiàn)對(duì)其資源的回收。
注意:一旦垃圾回收器準(zhǔn)備釋放對(duì)象占用的內(nèi)存,將首先調(diào)用該對(duì)象的finalize()方法,并且下一次垃圾回收動(dòng)作發(fā)生時(shí),才真正回收對(duì)象占用的內(nèi)存空間
2. GC本來(lái)就是內(nèi)存回收了,應(yīng)用還需要在finalization做什么呢? 答案是大部分時(shí)候,什么都不用做(也就是不需要重載)。只有在某些很特殊的情況下,比如你調(diào)用了一些native的方法(一般是C寫的),可以要在finaliztion里去調(diào)用C的釋放函數(shù)。
Finalizetion主要用來(lái)釋放被對(duì)象占用的資源(不是指內(nèi)存,而是指其他資源,比如文件(File Handle)、端口(ports)、數(shù)據(jù)庫(kù)連接(DB Connection)等)。然而,它不能真正有效地工作。