所以我正在研究垃圾收集,它是如何在java虚拟机内部工作的。
我遇到了一个名为finalize的方法(位于java.lang.Object
)。
我试过这段代码:
class Demo {
int x= 10;
int y = 20;
public void finalize() throws Throwable {
System.out.println("Finalize method");
}
static void show() {
Demo d1= new Demo();
display();
}
static void display()
{
Demo d2 = new Demo();
}
}
class Temp {
public static void main(String args[]) throws Exception {
Demo.show();
}
}
我能够编译这段代码,但是当我运行这段代码时,没有异常也没有输出。
如果可以,请帮助我。
我尝试使用谷歌和其他许多知名博客来解决我的问题(tutorialsPoint),(JavaRevisited)。
我甚至搜索了stackoverflow,但我无法解决我的问题。
P.S: - 输出应该是Finalize方法,你可以指出。请帮助我。
总结一下,我的问题是:为什么我不能执行Finalize方法?
答案 0 :(得分:3)
JAVA中的垃圾收集仅由JVM负责,并且不确定何时会发生。人们也使用
System.gc();
使用它也不能确保您的垃圾收集已经发生。它只是简单地建议VM需要垃圾收集。
答案 1 :(得分:0)
finalize方法。由于垃圾收集不在您的控制之下,您无法预测何时实际调用您的方法。
尝试在finalize语句中放入一些logger语句,一旦垃圾收集器收集了对象,就会立即注销该消息。
答案 2 :(得分:0)
以下链接对于理解finalize概念非常有帮助,
http://examples.javacodegeeks.com/core-java/java-destructor-why-is-it-missing/