gpt4 book ai didi

java - Java Finalize 中的可见性

转载 作者:行者123 更新时间:2023-12-02 05:55:55 28 4
gpt4 key购买 nike

下面给出实现

class Foo {
private RuntimeException closed = new IllegalStateException("not closed");

public void close() {
closed = null;
}

protected void finalize() {
if (closed != null)
closed.printStackTrace();
}
}

close是否需要定义为 volatile ?如果 Foo 在堆栈上实例化,行为会改变吗?

我试图追寻 JLS , JSR-133The JSR-133 Cookbook for Compiler Writers但无法真正消化规范的文本,也无法找到有关该问题的明确文章。

此外,“JSR-133 Cookbook for Compiler Writers”是这么说的:

Finalization support may require barriers (within garbage collectors) to ensure that Object.finalize code sees all stores to all fields prior to the objects becoming unreferenced. This is usually ensured via the synchronization used to add and remove references in reference queues.

最佳答案

Foo在栈上实例化,这是一个对象,它将在堆上,引用将在栈上。

您确实意识到 Finalize 可能根本不会被调用

关于java - Java Finalize 中的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23085654/

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