根据著名本书深入浅出Java页面661:
" Garbage Collector doesn't go inside String pool.
"
在阅读了关于SO的类似问题后,我发现了如下混合答案:
字符串文字的垃圾收集与普通对象相同. 读这个
一些答案反过来说.在这里阅读答案.
我的问题是:
如何在Java 6及之前收集字符串文字垃圾?
因为在Java 7中,将在堆上创建字符串文字,与Java 6相比,Java 7中字符串文字的垃圾收集将如何不同?
Aniket Thaku.. 6
字符串文字是实习的.从Java 7开始,HotSpot JVM将实际的字符串放入堆中,而不是permgen.
在java 7之前,hotspot将perings中的字符串放入.然而,在permgen实习的字符串被垃圾收集.显然,permgen中的Class对象也是可收集的,因此permgen中的所有内容都是可收集的,但在某些旧JVM中默认情况下可能不会启用permgen集合.
被实习的字符串文字将是由实体池中的String对象声明的Class对象所持有的引用.因此,只有在收集了引用它的Class对象时才会收集实习文字字符串.
摘自:( 来源).
字符串文字是实习的.从Java 7开始,HotSpot JVM将实际的字符串放入堆中,而不是permgen.
在java 7之前,hotspot将perings中的字符串放入.然而,在permgen实习的字符串被垃圾收集.显然,permgen中的Class对象也是可收集的,因此permgen中的所有内容都是可收集的,但在某些旧JVM中默认情况下可能不会启用permgen集合.
被实习的字符串文字将是由实体池中的String对象声明的Class对象所持有的引用.因此,只有在收集了引用它的Class对象时才会收集实习文字字符串.
摘自:( 来源).