常量池的表述有些模糊,在此细化一下,注意我们指的是 Java 7 版本之后。
JVM 中有多个常量池:
- 字符串常量池,存放在堆上,也就是执行 intern 方法后存的地方,class 文件的静态常量池,如果是字符串,则也会被装到字符串常量池中。
- 运行时常量池,存放在方法区,属于元空间,是类加载后的一些存储区域,大多数是类中 constant_pool 的内容。
- 类文件常量池,也就是 constant_pool,这个是概念性的,并没有什么实际存储区域。
在平常的交流过程中,聊的最多的是字符串常量池,。