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