jdk1.8jvm内存做了一个优化,就是把字符串常量池放到堆内存中了,jdk1.7是把字符串常量池放到方法区(元空间)中的,那么我们怎么验证jdk1.8是把字符串常量池放到堆内存中的了,我们用代码演示一遍。
List<String> list = new ArrayList<>();
for (long i = 0; i < 900000000; i++) {
//把数字转成字符串类型,然后放入到字符串常量池中
list.add(String.valueOf(i).intern());
}
}
为了方便证明,我把jvm参数设置一下
打印结果,证明堆内存溢出,说明jdk1.8字符串常量池在堆内存中。