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

Garbage collection of String literals in Java 6 and Java 7(Oracle Jdk)

根据著名图书首部Java页面661:

"EDCOX1→0"

在阅读了关于so的类似问题之后,我发现了各种各样的答案,比如:

  • 字符串文本的垃圾收集与普通对象相同。读这个
  • 有些答案恰恰相反。在这里阅读答案。
  • 我的问题是:

  • Java 6和之前收集的字符串文字如何垃圾??

  • 而且,在Java 7中,将在堆上创建字符串文字,字符串文本的垃圾收集将如何不同在Java 7中与Java 6相比?


  • String文字是被嵌入的。正如Java 7一样,热点JVM将插入的字符串放在堆中,而不是PyMGEN。

    在Java 7之前,热点将PiMGEN中的字符串插入。然而,permgen中的内部字符串被垃圾收集。显然,permgen中的类对象也是可收集的,所以permgen中的所有内容都是可收集的,尽管在某些旧的JVM中,默认情况下可能不启用permgen集合。

    正在实习的字符串文本将是声明类对象对实习池中的字符串对象持有的引用。因此,只有当引用它的类对象也被收集时,才可以收集interned文本字符串。

    从:(来源)。