gpt4 book ai didi

java - 垃圾收集和不完整的构造对象

转载 作者:行者123 更新时间:2023-12-02 06:31:35 25 4
gpt4 key购买 nike

这可能是一个非常天真的问题?

假设我有这样的类(class)

class SlowConstructor {

private final int a;
private final String unReachableString;

public SlowConstructor(String random) {
unReachableString = "I am not reachable will GC will collect me " + random;
Thread.sleep(1000*3600); // ignoring Exception check for readbility
a = 100;
Thread.sleep(1000*3600);
}
}

所以我的问题是,我是否创建了许多 SlowConstructor 对象(假设在 diff 线程中创建了 50 个对象),并且如您所见,每个构造函数将需要两个小时才能完成。 SlowConstructor unReachableString 中的 String 引用在大约两个小时内无法从任何代码访问。如果 GC 在这两个小时内运行,它不会收集 unReachableString ref 吗?我认为它不会被垃圾收集,但为什么呢?从哪里可以到达unReachableString

最佳答案

The String reference in SlowConstructor unReachableString is not reachable from any code for around two hours.

不正确。 SlowConstructor 对象可以从正在构造它的线程中立即访问。因此,字符串也是如此。

这意味着 String 对象在构造函数完成之前不会被垃圾回收。

(事实上,字符串对象对应于字符串文字,因此可以从为文字分配或应用方法的代码(任何代码!)访问。)

<小时/>

可达性的概念包括任何当前或将来的执行可以使用相关对象的机制。这包括对象尚未分配给命名变量或数组元素的情况...。

关于java - 垃圾收集和不完整的构造对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20014873/

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