我已经读过字符串池实际上是perm生成的一部分。并且字符串池通常不会被垃圾收集,因为即使在GC运行并且不再使用引用之后,引用仍然存在。它真的被垃圾收集了吗?就perm gen而言,它需要一个完整的GC来进行垃圾收集。收集是否发生?请帮助解决困惑
答案 0 :(得分:0)
简而言之,在主要GC期间收集JVM字符串池。
池中的String对象是普通Java垃圾收集规则的主题。
字符串池的语义类似于WeakHashMap。一旦String对象没有任何强引用,它就会被收集,并且将从池中删除引用。
在Java 7之前,只有在集合中包含perm gen时才可以收集池中的字符串文字(并非每个Full / Old GC都包含范围内的perm gen)。
在Java 7和Java 8池本身和池化的字符串文字是普通堆的一部分。
您可以在this article中找到更多详情。