静态常量池和运行时常量池的关系:静态常量池存放在.class文件中,当.class文件被加载后静态常量池就变成了运行时常量池。
字符串常量池和运行常量池的关系:字符串常量池又是运行时常量池中的一小部分,在jdk不同版本有不同的存放位置:
如:
- jdk1.6及以前运行时常量池包含字符串常量池都在方法区的永久代中;
- jdk1.7开始,运行时常量池仍然在方法区的永久代,而字符串常量池则被存放到堆中;
- jdk1.8开始运行时常量池被放到原空间,字符串常量池里依然在堆里;
常量池中主要存放:字面量(文本字符串,final常量)和符号引用类和接口的全局定名,字段的名称和描述,方法的名称和描述);