[英]Is it possible to identify that object is collected by garbage collector or not in java?
我已經讀過在下列情況下該對象有資格進行垃圾收集。
但是,無論如何都要確定垃圾收集器是否收集了符合垃圾收集條件的對象?
在對象進行垃圾回收后,JVM會調用其finalize方法。 默認實現什么都不做; 你可以覆蓋它,例如,打印告別消息,或關閉一些打開的資源。
但請注意,無法保證收集后的調用時間。
您可以實現Object#finalize()
方法
public class Driver {
public static void main(String[] args) throws Exception {
garbage();
System.gc();
Thread.sleep(1000);
}
public static void garbage() {
Driver collectMe = new Driver();
}
@Override
protected void finalize() {
System.out.println(Thread.currentThread().getName() + ": See ya, nerds!");
}
}
打印
Finalizer: See ya, nerds!
所以你可以在收集之前攔截。 javadoc說
finalize的一般契約是,當JavaTM虛擬機確定不再有任何方法可以被任何尚未死亡的線程訪問時,它被調用,除非采取了一個行動的結果通過最終確定一些其他准備完成的對象或類。 finalize方法可以采取任何操作,包括使該對象再次可用於其他線程;
但是也
對於任何給定對象,Java虛擬機永遠不會多次調用finalize方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.