Java 6和Java 7中的字符串文字的垃圾收集(Oracle Jdk)

时间:2013-12-05 13:58:48

标签: java string garbage-collection

根据着名的书Head first Java Page 661

Garbage Collector doesn't go inside String pool.

在阅读了关于SO的类似问题之后,我发现了如下的混合答案:

  1. 字符串文字的垃圾收集与普通对象相同。 Read this
  2. 有些答案反过来说。 Read answer here
  3. 我的问题是:

    1. 如何在Java 6及之前收集字符串文字垃圾

    2. 从Java 7开始,string literals will be created on heap, 字符串文字的垃圾收集将如何不同 在Java 7中与java 6相比?

1 个答案:

答案 0 :(得分:6)

字符串文字被实现。从Java 7开始,H​​otSpot JVM将实际的字符串放入堆中,而不是permgen。

在java 7之前,hotspot将perings中的字符串放入。但是,interned Strings in permgen were garbage collected。显然,Class objects in permgen are also collectable,因此permgen中的所有内容都是可收集的,但默认情况下可能不会在某些旧JVM中启用permgen集合。

正在实习的字符串文字将是由声明的Class对象保留在实习池中的String对象所持有的引用。因此,只有在收集引用它的Class对象时,才会收集实习的文字字符串。

(Source)获取。