我目前正在尝试更深入地研究 Java 虚拟机的规范。我一直在在线阅读 Inside the JVM book,其中有一个我似乎无法理解的令人困惑的抽象:常量池。这是本书的摘录:
对于它加载的每种类型,Java 虚拟机都必须存储一个常量池。常量池是类型使用的一组有序常量,包括文字(字符串、整数和浮点常量)和对类型、字段和方法的符号引用。常量池中的条目由索引引用,很像数组的元素。因为它持有对一个类型使用的所有类型、字段和方法的符号引用,所以常量池在 Java 程序的动态链接中起着核心作用
总的来说,我对上述和 CP 有几个问题:
- CP 是否位于
.class
每种类型的文件中? - 作者所说的“符号引用”是什么意思?
- 用简单的英语来说,常量池的目的是什么?