gpt4 book ai didi

java - 对终结器的调用到底去哪里了

转载 作者:行者123 更新时间:2023-12-01 08:10:03 25 4
gpt4 key购买 nike

现在,我编写了一个简单的代码。

public class ToDo {

ToDo instance;

public ToDo () {

}

void foo() {
System.out.println("foo.");
}

void bar() {
System.out.println("bar.");
}

public static void main(String args[]) throws Throwable {

ToDo inDo = new ToDo();
inDo.foo();
inDo.finalize();
inDo.bar();
}
}
  1. Object.java中的finalize是一个空函数,清理对象的繁重工作在哪里发生?

  2. 当对象被垃圾回收时调用终结器。这意味着它不应该调用 'bar' bar 仍然如何被打印。

最佳答案

The finalize in Object.java is an empty function, Where is the heavy work of cleaning the object happening?

Java 中的对象通常不会被“清理”。在 C++ 中,析构函数最常见的任务是释放分配的内存,但在 Java 中,VM 负责垃圾收集未使用的分配。终结器可用于释放非托管资源,例如 native 操作系统 UI 组件,但您不能依赖它们来完成这项工作,因为它们可能会在对象停止使用很长时间后被调用或根本不被调用。相反,您应该有一个诸如 dispose()close() 之类的方法(请参阅 Closeable ),并且您可以选择从终结器中调用该方法作为一种安全网,但您的客户端代码应该负责调用它。

Finalizer is called when object is garbage collected. Which means it should not call 'bar' How is bar still being printed.

该对象在终结器完成之前仍然处于 Activity 状态,因此调用 bar 是可以接受的。如上所述,您可以使用终结器来调用清理方法,以防您的客户端未打开某些内容。

关于java - 对终结器的调用到底去哪里了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com