Java Finalize 方法不调用

标签 java garbage-collection finalize

<分区>

这是一段代码。 finalize() 方法应该在 System.gc() 命令之后调用,但事实并非如此。 有什么建议吗?

class test123{
    test123(){
        System.out.println("Inside the constructor");

    }
}
public class finalizemerthd {

    public static void main(String args[]) {
        test123 obj1 = new test123();
        obj1 = null;
        System.gc();

    }

    protected void finalize() throws Throwable
    {
        System.out.println("Garbage collector called");
        System.out.println("Object garbage collected : " + this);
    }
}

最佳答案

System.gc() 仅请求收集,不保证垃圾收集。

此外,finalize 方法是为其对象被垃圾收集的类调用的,这在您的场景中不是这种情况。

请在下面找到更新的代码和输出:

class Test123 {
    Test123() {
        System.out.println("Inside the constructor");
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("Garbage collector called");
        System.out.println("Object garbage collected : " + this);
    }
}

public class Finalizemerthd {
    public static void main(String args[]) {
        Test123 obj1 = new Test123();
        obj1 = null;
        System.gc();
    }
}

输出:

Inside the constructor
Garbage collector called
Object garbage collected : MyGenerator.Test123@11adfb87

关于Java Finalize 方法不调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51011154/

相关文章:

java - 为什么不调用 finalize()?

java - 有没有比 collect 更好的方法来读取 spark 中的 RDD?

java - FirebaseAuth.getInstance().getUid() - 它是如何工作的?

java - 关联 JMS 消息的计划重试

c# - C# 中的大列表如何使用空闲内存?

c++ - C++/CLI 中的重复析构函数调用和跟踪句柄

garbage-collection - 是否-XX :+CMSIncrementalMode run on application threads or in GC-dedicated threads?

java - 如何在 LDAP 中获取用户的电子邮件 ID

java - finalize() 在 Java 8 中调用强可达对象

Java为什么销毁对象后finalize方法不工作?