我的應用程序使用了一些第三方庫(JTDS驅動程序),它有一些對象可以覆蓋finalize()方法。我認爲他們遵守關於什麼時候不使用finalize()
的所有規則 - 它不依賴於及時或完全運行它們。Java不釋放finalize()覆蓋的對象
問題是,他們的對象永遠不會被釋放。它們似乎卡在Finalizer隊列中,並且從未刪除。它們在幾個星期內緩慢建立起來,並將JVM從堆空間運行。線程轉儲顯示終結器線程正在等待某些事件調用finalize()
。如果我調用System.runFinalization()
,則對象已完成並從終結器隊列中正確刪除(並且不再顯示在堆轉儲中)。
爲什麼System.runFinalization()
會正確移除對象,但Finalizer線程不會自行完成它?
我不明白爲了幫助你,有人會重現你的問題。 –
您在啓動時將什麼參數傳遞給JVM? –
除非你有這些finalize方法的代碼可用,你如何期待某個人完全幫助? – fge