如果字符串池是Perm Gen Space的一部分,它是否会被垃圾收集?如果确实如此,是否会在次要GC或完整GC期间收集?

时间:2017-03-07 13:02:09

标签: java memory-management garbage-collection permgen string-pool

我已经读过字符串池实际上是perm生成的一部分。并且字符串池通常不会被垃圾收集,因为即使在GC运行并且不再使用引用之后,引用仍然存在。它真的被垃圾收集了吗?就perm gen而言,它需要一个完整的GC来进行垃圾收集。收集是否发生?请帮助解决困惑

1 个答案:

答案 0 :(得分:0)

简而言之,在主要GC期间收集JVM字符串池。

池中的String对象是普通Java垃圾收集规则的主题。

字符串池的语义类似于WeakHashMap。一旦String对象没有任何强引用,它就会被收集,并且将从池中删除引用。

在Java 7之前,只有在集合中包含perm gen时才可以收集池中的字符串文字(并非每个Full / Old GC都包含范围内的perm gen)。

在Java 7和Java 8池本身和池化的字符串文字是普通堆的一部分。

您可以在this article中找到更多详情。