gpt4 book ai didi

java - 对字符串和字符串常量的弱引用

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:25 25 4
gpt4 key购买 nike

我在维基百科上看到了这个关于弱引用的例子:

import java.lang.ref.WeakReference;

public class ReferenceTest {
public static void main(String[] args) throws InterruptedException {

WeakReference r = new WeakReference(new String("I'm here"));
WeakReference sr = new WeakReference("I'm here");
System.out.println("before gc: r=" + r.get() + ", static=" + sr.get());
System.gc();
Thread.sleep(100);

// only r.get() becomes null
System.out.println("after gc: r=" + r.get() + ", static=" + sr.get());

}
}

我不明白在这种情况下为什么只有 r.get() 返回 null 而不是 sr.get()。谁能告诉我原因吗?

非常感谢。

最佳答案

文字“我在这里”是一个编译时常量字符串,因此被放置在常量字符串池中,该常量字符串池(直到java 7)从未被垃圾回收。这意味着 sr 指向一个永远不会被垃圾收集的对象。另一方面,r 指向该字符串的副本,该副本不在任何 const 池中,因此符合收集条件。

参见 documentation for String.intern()有关此字符串池的更多详细信息

关于java - 对字符串和字符串常量的弱引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35985877/

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