【发布时间】:2013-02-25 18:38:57
【问题描述】:
我正在阅读有关垃圾收集的信息,当我搜索字符串文字垃圾收集时,我的搜索结果令人困惑。
我需要澄清以下几点:
如果一个字符串在编译时被定义为文字[例如:
String str = "java"],那么它会被垃圾回收吗?如果使用实习生方法 [例如:
String str = new String("java").intern()] 那么它会被垃圾回收吗?它也将与第 1 点中的字符串文字区别对待。有些地方提到,只有当
String类被卸载时,文字才会被垃圾回收?这是否有意义,因为我认为String类永远不会被卸载。
【问题讨论】:
-
1 - stackoverflow.com/questions/2202162/… ; 2 - stackoverflow.com/questions/6470651/… ; 3 - String a = new String("asd") -> "a" 引用将被垃圾回收,但只是对 "asd" 的引用,而 "asd" 将永远存在。
-
如果你搜索更多,你会发现一些地方提到使用实习生创建的字符串文字可以被垃圾收集,因为它们使用弱引用,但我无法确认,这就是我发布的原因很多不同的反应。
-
“从 Java 7 开始,Java String Pool 存储在 Heap 空间中,由 JVM 进行垃圾回收。这种方法的优点是降低了 OutOfMemory 错误的风险,因为未引用的字符串将从池中删除,从而释放内存。” Guide to Java String Pool by baeldung
-
Ole V.V.有正确答案
标签: java string garbage-collection