你們可能會認爲,在15-20分鐘內,我已經問過4-5個關於同一主題的問題,所以我可能需要關於這個的教程。但我通過閱讀關於GC的文章來了解這些問題。垃圾收集器和finalize()方法
所以我的問題是GC只會在實例的一次生命週期中調用一個實例的finalize()方法,即使同一個對象在其finalize()方法中被垃圾收集的時候忽略不計。所以我想知道GC如何知道它在第二次收集它之前執行過一次finalize()方法
你們可能會認爲,在15-20分鐘內,我已經問過4-5個關於同一主題的問題,所以我可能需要關於這個的教程。但我通過閱讀關於GC的文章來了解這些問題。垃圾收集器和finalize()方法
所以我的問題是GC只會在實例的一次生命週期中調用一個實例的finalize()方法,即使同一個對象在其finalize()方法中被垃圾收集的時候忽略不計。所以我想知道GC如何知道它在第二次收集它之前執行過一次finalize()方法
說實話,你的生活會更好,如果你忘了,終結存在。我一直在編寫Java多年,從來沒有理由使用終結器。
他們很慢,沒有明確定義(有時他們永遠不會跑!),並且通常是PITA。
如果您正在管理外部資源,並且使用try {} finally {}塊進行清理,請沿着Closeable接口的行進行操作。否則,請嘗試儘可能多地信任語言以清理內存。
取決於實現。據推測,虛擬機在每個對象上都有一個祕密位,或者有一個包含已經「完成」的對象的表。如果我不得不猜測,我會說後者,因爲大概已經完成的對象仍然處於閒置狀態,預計會很小,所以系統中每個對象都有點似乎有點浪費。
你丫再:)
注意,在終結的主題,如果你真的FORCE使用JVMTI的ForceGargabeCollection一個GC,它是專門指出:
「此功能不會造成終結者將被運行。「
再次,你可能真的不希望這樣做,但當時如果你有2K +代表以及有關GC 5個問題被認爲這是有趣的不斷重複,使用JVMTI的ForceGarbageCollection你真的可以FORCE一GC。
權威信息,以如何強制GC:
http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#ForceGarbageCollection
祕密位。定稿可能很容易成爲瓶頸。 – 2010-02-04 19:46:38
@tackline有趣。謝謝。 – 2010-02-04 20:11:09