finalize的文档说
垃圾收集时由垃圾收集器调用对象 确定没有对该对象的更多引用。一个子类 覆盖最终化方法来处理系统资源或 进行其他清理。
所以我假设一旦程序执行结束,将在对象上调用finalize方法。
public final class MainClass{
public static void main(String[] args) {
A s = new A(5);
s = new A(6);
System.out.println(s);
System.out.println("End of main");
}
}
final class A{
private int value;
public A(int value) {
this.value = value;
}
@Override
protected void finalize() throws Throwable {
System.out.println("Destroyed object is :"+this);
System.out.println("Inside finalize");
super.finalize();
}
@Override
public String toString() {
return ((Integer)value).toString();
}
}
程序的输出是
6
End of main
使用new A(6)
初始化System.gc()
之后,运行finalize方法,垃圾收集器删除值为5的对象,输出将为
6
Destroyed object is :5
Inside finalize
End of main
我已经读过,一旦程序结束,操作系统将清理内存,因此在程序运行时不需要进行垃圾回收。
所以我有三个问题,
finalize
方法是垃圾收集?如果是,那么为什么现在不调用它?如果不是,那么它将被调用?finalize()
方法吗? 注意:在我的情况下,调用垃圾收集器是因为程序中不再引用new A(5)
。
编辑:
解释为什么这个问题不同:
这个问题更多的是关于将finalize()
方法始终在垃圾收集上调用,并且可以在不调用finalize()
方法的情况下进行垃圾收集。
此问题尚未提出,如果有,则StackOverflow无法解答此类问题。