我的JDK版本是1.7.0_25
class A {
public void finalize() {
System.out.println("deleting...");
}
}
public class Test {
public static void main(String[] args) {
new A();
System.gc();
System.out.println("main class");
}
}
我预计输出为
deleting...
main class
但就我而言,没有输出,原因是什么?当我使用 JDK 1.7.0_09 在线编译并运行代码时,输出为,
main class
deleting...
为什么“主类”首先打印?
最佳答案
GC 永远不会保证清理何时发生,
finalize()
可能会被调用,也可能不会被调用。
通过执行System.gc();
,您只是请求调用 GC,但由 JVM 来满足您的请求。
System.gc() 会调用清理吗?
答案会因多种因素而异,例如您运行的 JVM、它所处的模式以及它使用的垃圾收集算法。
我不会在你的代码中依赖它。如果 JVM 将抛出 OutOfMemoryError,调用 System.gc() 不会阻止它,因为垃圾收集器将在达到这种极端情况之前尝试释放尽可能多的内存。
所以...如果您确实想要执行任何操作,请不要在 finalize()
中编写该代码
关于java - 垃圾收集器不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22779355/