【发布时间】:2013-08-11 17:34:24
【问题描述】:
在探索了 java 的字符串内部结构后,我对所谓的“perm 空间”感到困惑。我最初对它的理解是它包含String literals 以及this question 中解释的类元数据。
我还阅读了有关String.intern() 方法的信息,它将Strings 放入字符串池中,返回对其唯一实例的引用。据我了解,这是保存在 JVM 永久空间中的字符串文字的同一个字符串池。在我看来,“烫发空间”似乎不可能是可修改的(毕竟它是永久的,是吗?)。但后来我发现this question EJP 对已接受答案的最高投票评论说明了这一点
Intern'd 字符串已经支持 GC 好几年了。
暗示 GC 在 perm-space 上运行,这似乎不是很永久。这如何调和? GC 会检查 perm-space 中的所有内容吗? GC 是否检查字符串池中的所有内容,包括来自源的字符串文字?实习生字符串是否有第二个字符串池? GC 是否只知道在收集时查看实习生字符串?或者这个评论是错误的并且实习一个字符串会阻止它被 GC(我希望不是这种情况)?
【问题讨论】:
标签: java string garbage-collection jvm string-interning