finalize函數(shù)的一點(diǎn)疑問(wèn)
Posted on 2006-11-23 15:21 itspy 閱讀(1277) 評(píng)論(6) 編輯 收藏 所屬分類: JAVA技術(shù)最近經(jīng)常找工作面試,在復(fù)習(xí)一些基礎(chǔ)知識(shí)時(shí),讓我想起了一個(gè)平時(shí)沒(méi)有留言到的問(wèn)題,就是finalize與GC的關(guān)系。在查一些資料后還是不太明白,特別是下面一段話。
根據(jù)Java語(yǔ)言規(guī)范,JVM保證調(diào)用finalize函數(shù)之前,這個(gè)對(duì)象是不可達(dá)的,但是JVM不保證這個(gè)函數(shù)一定會(huì)被調(diào)用。另外,規(guī)范還保證finalize函數(shù)最多運(yùn)行一次。
(上面的這句話來(lái)源:http://www-128.ibm.com/developerworks/cn/java/l-JavaMemoryLeak2/index.html)
這句話是不是可以理解:“finalize函數(shù)可能不會(huì)被運(yùn)行,并且就算運(yùn)行也只會(huì)被運(yùn)行一次?”
那么很自然的就要問(wèn),它在哪些情況會(huì)被調(diào)用,在哪些情況下不會(huì)被調(diào)用。
如果不被調(diào)用,那么如何釋放一些特定的資源呢?
我以前一直理解的是,它一定會(huì)在對(duì)象被回收之前被調(diào)用,也就是GC會(huì)保證它運(yùn)行一次,也就是肯定會(huì)運(yùn)行一次。