時間關鍵的任務不應該由終結函數來完成。
如果你為某個對象定義了finalize() 方法,JVM 可能不會調用它,因為垃圾回收器不曾釋放過那些對象的記憶體。調用System.gc() 也不會起作用,因為它僅僅是給 JVM 一個建議而不是指令。根據 Java 文檔,finalize() 是一個用于釋放非 Java 資源的方法。但是,JVM 有很大的可能不調用對象的finalize() 方法,是以很難證明使用該方法釋放資源是有效的。是以,你不應當依靠finalize() 來釋放資源。取而代之,你應當明确的清除那些資源或建立一個try...finally 塊(或類似的機制)來實作。
顯式的終止方法通常與try...finally 結構結合起來使用,以確定及時終止。
比如:
FileInputStream in = null;
try {
in = new FileInputStream("1.txt");
in.read();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
in = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}