每次我们在Java中明确调用finalize()
时,是否必须调用System.gc()
方法?
1。 How to Handle Java Finalization's Memory-Retention Issues
我想了解上面的链接
2。我知道每次我们明确地调用System.gc()时都不会调用finalize()但现在的问题是为什么有时会调用它而有时会调用它?我想我现在的问题更有价值了。
答案 0 :(得分:1)
没有。不能保证GC会发生,更不用说响应System.gc()
,更不用说终结者将会被运行。
现在的问题是为什么有时它会被调用而有时不会
因为GC和终结可能会因System.gc()
而运行:没有什么可以阻止它,所以它会发生,如果没有,不会,因为没有保证。
答案 1 :(得分:1)
没有。
调用gc方法建议表示Java虚拟机 努力回收未使用的物体,以便制造 他们目前占用的内存可以快速重用。
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();
}}