为什么finalize()不在这里被称为.代码编译并成功运行,但没有任何输出.
package temp;
public class Temp {
int i;
Temp(int j) {
i = j;
}
public void finalize() {
if (i == 10) {
System.out.println("Finalize called.");
}
}
public static void main(String[] args) {
Temp obj = new Temp(10);
System.gc();
}
}
Run Code Online (Sandbox Code Playgroud)
您的调用System.gc();没有任何区别,因为您的Temp实例具有引用(obj),因此它不符合垃圾回收的条件.
即使它有资格进行垃圾收集,调用System.gc();也不一定会收集所有没有立即引用它们的对象.