根据着名的书Head first Java Page 661:
“Garbage Collector doesn't go inside String pool.
”
在阅读了关于SO的类似问题之后,我发现了如下的混合答案:
我的问题是:
如何在Java 6及之前收集字符串文字垃圾
从Java 7开始,string literals will be created on heap, 字符串文字的垃圾收集将如何不同 在Java 7中与java 6相比?
答案 0 :(得分:6)
字符串文字被实现。从Java 7开始,HotSpot 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)获取。