0

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

4

1 回答 1

1

简而言之,JVM String pool是在major GC期间收集的。

池中的字符串对象受普通 Java 垃圾收集规则的约束。

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

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

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

您可以在本文中找到更多详细信息。

于 2017-03-07T21:42:38.510 回答