运行时常量池是JVM方法区的一部分。
常量池是字节码文件(.class)一部分,存储编译期间生成的字面量和引用,常量池会随着类的加载器存入到方法区中。
运行时常量池相比于常量池更具有动态性。常量并不一定要在编译时才能产生,使用String.intern()方法,可以在运行期间将常量放入池中。
- JVM会对每一个类维护一个常量池,常量池中的每个项都是由索引值来访问的;
- 原来在常量池中的符号引用,在运行时常量池中会有相应的真实地址;
常量池中主要存放两大类常量——字面量和符号引用:
字面量:
- 文本字符串
- final声明的常量
符号引用:
- 类和接口的全限定名
- 字段的名称和描述符
- 方法的名称和描述符