每当我们在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();
}}
另一答案
没有。
调用gc方法表明Java虚拟机花费了大量精力来回收未使用的对象,以使其当前占用的内存可用于快速重用。
对于任何给定对象,Java虚拟机永远不会多次调用finalize方法。
另一答案
不可以。不保证GC会发生,更不用说响应System.gc()
,更不用说终结者将会因此而被运行。
现在的问题是为什么有时它会被调用而有时不会被调用
因为GC和终结可能会因为System.gc()
而运行:没有什么可以阻止它,所以它发生了,如果不是,不是,因为没有保证。
以上是关于每当我们在java中调用System.gc()时,是否必须调用finalize()方法?的主要内容,如果未能解决你的问题,请参考以下文章