常量池StringTable中new String(“11”)常量池增加2的问题
问题发现
在学习jvm虚拟机字符串常量池的时候,发现创建字符串对象new String(“11”)字符串常量池的长度增加了2
public class StringDemo {
public static void main(String[] args) {
System.out.println("1");
System.out.println("2");
System.out.println("3");
System.out.println("4");
System.out.println("5");
System.out.println("6");
System.out.println("7");
System.out.println("8");
System.out.println("9");
System.out.println("10");
//此处字符串常量池增加2
String s1=new String("11");
return;
}
}
分析:
-
在jdk6、7、8、10、11中都试了一下,都是增加了2
-
在jdk9中试了一下,增加了1
-
分析编译后通过反编译命令执行反编译后字节码为
在创建字符串11之前,生产了一个字符串java/lang/String,但是jdk9怎么回事就很难说清楚了。
猜测
- jdk9在加载运行时常量池的时候,把java.lang.String提前加载了