每当我们在java中调用System.gc()时,是否必须调用finalize()方法?

时间:2018-04-29 10:35:18

标签: java garbage-collection

每次我们在Java中明确调用finalize()时,是否必须调用System.gc()方法?

1。 How to Handle Java Finalization's Memory-Retention Issues

我想了解上面的链接

2。我知道每次我们明确地调用System.gc()时都不会调用finalize()但现在的问题是为什么有时会调用它而有时会调用它?我想我现在的问题更有价值了。

3 个答案:

答案 0 :(得分:1)

没有。不能保证GC会发生,更不用说响应System.gc(),更不用说终结者将会被运行。

  

现在的问题是为什么有时它会被调用而有时不会

因为GC和终结可能会因System.gc()而运行:没有什么可以阻止它,所以它会发生,如果没有,不会,因为没有保证。

答案 1 :(得分:1)

没有。

System.gc

  

调用gc方法建议表示Java虚拟机   努力回收未使用的物体,以便制造   他们目前占用的内存可以快速重用。

finalize

  

Java虚拟化永远不会再调用多次方法   任何给定物体的机器。

答案 2 :(得分:1)

在此示例中,可以调用或不调用finalize方法()。它完全依赖于JVM,当调用finalize方法时。如果你有时运行这个程序你有时会得到输出.. ( - , - )所以试试你的运气

class Person{  
public int a;
public void finalize(){
    //System.out.println("finalize called"+this.hashCode());
    System.out.println("finalize called"+this.a);
}  
public static void main(String[] args){  
    Person f1=new Person();  
    f1.a=10;
    Person f2=new Person();  
    f1=null;  
    f2=null;  
    System.gc();  
}}