我正在阅读java中的内存管理。它讨论了Meta空间,但它没有谈论字符串池。你能告诉我java 8中字符串池发生了什么。
先谢谢。 拉杰什
答案 0 :(得分:12)
已经对java7本身进行了更改,常量池已从permgen空间移动到典型的堆空间(仍然池行为相同)其中,在Java 8中完全删除了permgen空间。 Metaspace与常量池无关,它对所有对象都是通用的。
答案 1 :(得分:0)
www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html
这里是java 8发行说明,似乎没有任何关于String.intern的内容。这里差别不大: -XX:StringTableSize参数的默认值在Java 6和Java 7中为1009,直到Java7u40。它在Java 7u40中增加到60013(在Java 8中也使用相同的值)。它很微妙,但具有很大的性能优势。 查看此博客文章了解更多信息: http://java-performance.info/string-intern-in-java-6-7-8/
答案 2 :(得分:0)
字符串池的概念没有任何变化,但是从Java 7开始,在堆内存而不是permgen中创建了字符串池。这样做的好处是,JVM垃圾回收器会处理字符串池中未引用的变量。因此它将在空间上得到改善。