我想知道什麼時候在Java中釋放一個對象?如何知道何時在Java中釋放對象?
如果在Swift中有類似deinit
的東西,我可以在那裏釋放一些資源。 前)
deinit {
myResource1.dispose()
myResource2.release()
someOtherResource.close()
....
}
是它在Java中的壞習慣,所以我必須找到另一種方式?
具體來說,我想知道列表視圖中的某行何時死亡。
我想知道什麼時候在Java中釋放一個對象?如何知道何時在Java中釋放對象?
如果在Swift中有類似deinit
的東西,我可以在那裏釋放一些資源。 前)
deinit {
myResource1.dispose()
myResource2.release()
someOtherResource.close()
....
}
是它在Java中的壞習慣,所以我必須找到另一種方式?
具體來說,我想知道列表視圖中的某行何時死亡。
與構造函數不同,在Java中沒有析構函數或de-init。當實例不可訪問時(不再提及對象),它將自動收集垃圾垃圾。
您可以嘗試在您的課程中實施finalize()
方法。
當垃圾回收確定沒有更多對該對象的引用時,由對象上的垃圾回收器調用。
你不應該使用finalize()。您無法保證GC何時或如何調用此方法。至少你可以確定它不會在對象的內存被GC回收之前調用它,這通常在參考不可見之後很多。 Java只是沒有這種類型的功能,這就是爲什麼有必要釋放資源的close()方法。 –
@MatthiasWimmer所以我們必須編寫我們自己的方法並在必要時調用方法。對 –
Employee類:
class Employee {
public int id;
public Employee(int id) {
// TODO Auto-generated constructor stub
this.id = id;
}
@Override
protected void finalize() throws Throwable {
// TODO Auto-generated method stub
super.finalize();
System.out.println(this.id + " Garbage Collected");
}
}
MainClass:
public class TestMain {
public static void main(final String[] args) throws ParseException {
Employee p = new Employee(111);
Employee p2 = new Employee(222);
p = null;
p2 = null;
System.gc();
}
}
注意:雖然它不知道是否垃圾收集器將被稱爲與否即使我們調用GC()方法
「我想知道列表視圖中的某行何時死亡。」 - 您可以在帖子中發佈相關代碼嗎? Java會自動回收內存,但不會自動執行其他資源。 'finalize()'方法可以幫助確保資源最終被釋放,但*不及時*。你可能想看一下[try-with-resources](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html),它確保每個資源在聲明。 –