为什么finalize()在Java 中根本不能保证执行?是finalize()不是应该使用方法???
考虑下面的程序.
class Test{
protected void finalize()
{
System.out.println("Will i execute?");
}
public static void main(String args[])
{
Test t=new Test();
}
}
Run Code Online (Sandbox Code Playgroud)
该程序运行时有一个空输出.我们知道finalize()在对象符合垃圾收集条件之前用于清理任何外部资源,并且finalize()将由JVM调用.在内部,finalize()我们将指定在销毁对象之前必须执行的操作.是finalize()方法邪?
finalize()当垃圾收集确定不再有对该对象的引用时,由垃圾收集器在该对象上调用。。
您可以使用System.gc()显式调用垃圾收集并检查您的语句是否被打印。但是 JVM 可以自由地忽略您的请求(实际上取决于 JVM 实现......)。只有当JVM的内部状态告诉它垃圾太多并且需要收集时,它才会运行GC(并且该行将我执行)才会被打印。