java中的Finalize方法[垃圾收集]

时间:2014-07-22 09:53:21

标签: java garbage-collection jvm

所以我正在研究垃圾收集,它是如何在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方法?

3 个答案:

答案 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/