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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每当我们在java中调用System.gc()时,是否必须调用finalize()方法?相关的知识,希望对你有一定的参考价值。

每当我们在Java中明确地调用finalize()时,是否必须调用System.gc()method?

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

我想了解上面的链接

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

答案

在此示例中,可以调用或不调用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();  
}}
另一答案

没有。

System.gc

调用gc方法表明Java虚拟机花费了大量精力来回收未使用的对象,以使其当前占用的内存可用于快速重用。

finalize

对于任何给定对象,Java虚拟机永远不会多次调用finalize方法。

另一答案

不可以。不保证GC会发生,更不用说响应System.gc(),更不用说终结者将会因此而被运行。

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

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

以上是关于每当我们在java中调用System.gc()时,是否必须调用finalize()方法?的主要内容,如果未能解决你的问题,请参考以下文章

显式调用System.gc()?

java调用System.gc()会发生什么?

Java应用性能调优之详解System的gc垃圾回收方法

System.gc()

java垃圾回收

java垃圾回收