gpt4 book ai didi

java - Java 中 finalize() 操作的顺序

转载 作者:行者123 更新时间:2023-11-30 06:48:24 24 4
gpt4 key购买 nike

我试图理解有关 Java 的垃圾收集器和 finalize() 方法的练习。

public class Five {
static int x = 1;
class String5 {
String s;
String5() {
this.s = ""+(++x);
}
public void finalize() {
System.out.print(s);
}
}

String5 a = new String5();
void f() {
String5 a = new String5();
}
public void finalize() {
System.out.print("H");
}

public static void main(String[] args) {
Five a5 = new Five();
a5.f();
a5 = new Five();
a5.f();
System.gc();
System.runFinalization();
}
}

练习要求我预测输出。正确答案是 532H。我预测输出应该是 2H35,但我不明白为什么我的顺序不正确。

最佳答案

根据 JLS,Java 语言没有定义 finalize 方法的执行顺序,因此实际顺序是一个实现细节。

JLS 12.6. Finalization of Class Instances :

The Java programming language imposes no ordering on finalize method calls. Finalizers may be called in any order, or even concurrently.

您遇到的顺序似乎暗示了堆栈实现 - 第 4 个也是最后一个创建的 String5 实例符合垃圾收集条件,首先完成(打印 5) ,然后是打印 32 的第二个和第一个(第三个不符合垃圾回收条件),最后是第一个 Five 实例完成并打印 H

但是,不同的 JDK 实现可能会产生不同的顺序。

关于java - Java 中 finalize() 操作的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44389311/

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