1.Class常量池
Class常量池就是Class文件中的资源仓库,Class文件除了包含类的版本、字段、方法等信息外,还有一项信息就是常量池
,存放编译器生成的字面量
和符号引用
。而运行时常量池就是指JVM运行过程中类加载以后讲类的常量池载入方法区就形成了运行时常量池。
1.1 字面量
字母、数字等构成的字符串或者数值的常量等信息。
1.2 符号引用
类、接口的全限定名
字段的名称和描述符
方法的名称和描述符
2.字符串常量池
在JDK1.7以前字符串常量池在永久代中,1.7以后JVM将字符串常量池挪到了堆中。
三种字符串的操作手段:
String s = "minor"
,直接使用字面量的形式,这样的对象只会存放在字符串常量池中。String s = new String("minor")
,在堆中和常量池中各有一份。String s = "minor".intern()
,这种方式会在常量池先检查一下有没有minor,如果有直接返回,如果没有则将堆中的minor引用复制到常量池中,然后返回常量池的引用。