JDK8 Java字符串常量池在Java堆中而不是方法区以及运行时常量池

String.intern()方法的作用是返回一个字符串引用,引用的是字符串常量池中的字符串(字面量)

在JDK1.7之前运行时常量池逻辑包含字符串常量池存放在方法区, 此时hotspot虚拟机对方法区的实现为永久代

在JDK1.7 字符串常量池被从方法区拿到了堆中, 这里没有提到运行时常量池,也就是说字符串常量池被单独拿到堆,运行时常量池剩下的东西还在方法区, 也就是hotspot中的永久代

在JDK1.8 hotspot移除了永久代用元空间(Metaspace)取而代之, 这时候字符串常量池还在堆, 运行时常量池还在方法区, 只不过方法区的实现从永久代变成了元空间(Metaspace) 

猜你喜欢

转载自www.cnblogs.com/goodbye-lazy/p/11265022.html