[英]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.