我已经读过在下列情况下该对象有资格进行垃圾收集。
但是,无论如何要确定垃圾收集器是否收集了符合垃圾收集条件的对象?
答案 0 :(得分:2)
在对象被垃圾收集后,JVM调用其finalize方法。默认实现什么都不做;你可以覆盖它,例如,打印告别消息,或关闭一些打开的资源。
但是请注意,无法保证在收集后多久调用它。
答案 1 :(得分:2)
您可以实施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方法 任何给定物体的机器。