比方說,我已經用close()方法創建了一些資源類來清理資源,我想覆蓋finalize()以釋放資源(並打印一個警告)如果有人忘記調用close()。這怎麼能正確完成?如何正確地實現一個終結器來檢測Java中的資源泄漏
- 僅建議用於本地(JNI分配)資源嗎?
- 如果從終結器中使用對已完成的另一個對象的引用,會發生什麼?如果存在循環依賴關係,我不會看到垃圾收集器如何阻止您訪問可能已執行終結器的對象。
- 有沒有更好的替代方案來重寫finalize()來檢測和/或處理資源泄漏?
- 執行終結器時需要注意的其他陷阱?
注意:我知道使用finalize()通常是個壞主意,並且不保證被調用,還有其他幾個問題在討論這個問題。這個問題具體是關於如何在Java中實現終結器,而不是約爲什麼你應該(或不應該)。
我希望我的答案有幫助。讓我知道我是否錯過了任何東西。 –
解釋了關於從終結器訪問可能已完成的對象的第二點。仍然好奇這會帶來什麼影響。 – Soulman