gpt4 book ai didi

java - Java 8 中的 interned 字符串是否适合垃圾回收?

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

我在 Daniel Liang 的最新 Java 编程书籍(第 10 版,第 386 页)中看到了以下文字:

Does the following code change the contents of the string?

String s = "Java";

s = "HTML";

The answer is no. .... The first String object still exists after the assignment, but it can no longer be accessed, because variable s now points to the new object, as shown in Figure 10.15.

根据上面的文字,作者的观点似乎是字符串对象“Java”没有被垃圾回收,即使它不再被引用。我知道Java中interned字符串的存储位置发生了一些变化。请记住,上面的书讨论的是 Java SE 8。

但是根据Java垃圾收集器,未使用的对象(不再引用的对象)会被自动垃圾收集。

那么 Java SE 8 的实际情况是哪种情况?

最佳答案

字符串文字是内部字符串,但并非所有内部字符串都是字符串文字。

字符串文字由定义它们的类保持 Activity 状态,而这些类又由实例和类加载器保持 Activity 状态。您需要对它们进行类卸载才能获得 GC 资格。

另一方面,内部字符串仅保证 if string1.equals(string2) then string1.intern() == string2.intern()。这个特定的定义允许对 interned 字符串进行垃圾收集,因为 oldInternedString != newInternedString 是不可观察的,因为如果它已被垃圾收集,则无法引用 oldInternedString。因此,字符串驻留表可以(但不是必需)实现为弱引用表,这允许它们被 GC 处理。

关于java - Java 8 中的 interned 字符串是否适合垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43264885/

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