Java 無 delete 關鍵字,依賴垃圾回收器釋放記憶體。但 finalize() 非解構子,不保證被呼叫,不可作為一般清理機制。
finalize() 僅在回收前呼叫一次,非確定性finalize() 幾乎失效,1.1 需顯式呼叫 System.runFinalizersOnExit(true)僅用於釋放「非 Java 記憶體資源」(如 JNI 配置的 C 記憶體需呼叫 free())。一般資源(檔案、連線)應用 try-with-resources 或明確 close() 方法。
程式碼示範建立大量 Chair 物件,觀察 finalize() 呼叫時機。結果顯示:程式結束時未回收物件的 finalize() 不會執行,除非強制觸發。
finalize() 進行關鍵資源釋放AutoCloseable 配合 try-with-resources正確理解清理機制,是避免資源洩漏的關鍵。