java - finalize() 没有被调用

标签 java finalize

为什么这里没有调用 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();
    }

}

最佳答案

您对 System.gc(); 的调用没有任何区别,因为您的 Temp 实例有一个引用 (obj),所以它不是有资格进行垃圾收集。

即使它符合垃圾收集条件,调用 System.gc(); 也不一定会立即收集所有没有引用它们的对象。

关于java - finalize() 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27499077/

相关文章:

JavaFX:我编写的代码无关紧要,它总是显示空白的 "hello word"GUI

java - 在 Java 中显示 XML

Java - 程序末尾的对象不是 "garbage collected"吗?

java - android:为什么要关闭 SQLite 数据库游标,尽管它们会在它们的 finalize 方法中关闭?

java - 完成数组的第一个元素

java - Object.finalize() 方法忽略抛出的异常

使用对象的链表的 Java toString 打印错误

java - 由于 PdfDocument 引发的 NullPointerException,无法使用 itext 7.0.0 打开 PDF

java - 如何在java中列出200万个文件目录而不会出现 "out of memory"异常

java - 当GC可以释放所有连接时,为什么需要finalize