如果字符串池是 Perm Gen Space 的一部分,它会被垃圾收集吗?如果是,它是在次要 GC 还是完整 GC 期间收集的?
If string pool is a part of Perm Gen Space, does it get garbage collected? And if it does, does it get collected during minor GC or full GC?
我读到字符串池实际上是烫发生成的一部分。并且字符串池通常不会被垃圾收集,因为即使在 GC 运行并且不再使用引用之后引用仍然存在。那么它真的会收集垃圾吗?就 perm gen 而言,它需要一个完整的 GC 来进行垃圾收集。那么收集是否发生?请帮忙解惑
简而言之,JVM String pool是在major GC时回收的。
池中的字符串对象受常规 Java 垃圾收集规则的约束。
字符串池在语义上类似于 WeakHashMap。一旦 String 对象没有任何强引用,它将被收集并从池中删除引用。
在 Java7 之前,只有当 perm gen 包含在集合中时才可以收集池中的字符串文字(并非每个 Full/Old GC 都在范围内包含 perm gen)。
在 Java 7 和 Java 8 中,池本身和池化的字符串文字是普通堆的一部分。
您可以在 this article 中找到更多详细信息。
我读到字符串池实际上是烫发生成的一部分。并且字符串池通常不会被垃圾收集,因为即使在 GC 运行并且不再使用引用之后引用仍然存在。那么它真的会收集垃圾吗?就 perm gen 而言,它需要一个完整的 GC 来进行垃圾收集。那么收集是否发生?请帮忙解惑
简而言之,JVM String pool是在major GC时回收的。
池中的字符串对象受常规 Java 垃圾收集规则的约束。
字符串池在语义上类似于 WeakHashMap。一旦 String 对象没有任何强引用,它将被收集并从池中删除引用。
在 Java7 之前,只有当 perm gen 包含在集合中时才可以收集池中的字符串文字(并非每个 Full/Old GC 都在范围内包含 perm gen)。
在 Java 7 和 Java 8 中,池本身和池化的字符串文字是普通堆的一部分。
您可以在 this article 中找到更多详细信息。