我目前正在尝试更深入地研究Java虚拟机的规范。我一直在阅读Inside the JVM book online,有一个我似乎无法理解的令人困惑的抽象:常量池。这是本书的摘录:



关于以上内容和CP,我有几个问题:

  • 每种类型的CP是否位于.class文件中?
  • “符号引用”是什么意思?
  • 用简单的英语讲,常量池的用途是什么?
  • 最佳答案

    我认为了解如何使用图表构造框架会有所帮助。

    框架是操作数(操作指令)所在的位置,也就是动态链接发生的位置。可以这么说,这是使用常量池来跟踪类及其成员的一种简便方法。

    每个帧都包含对运行时常量池的引用。该引用指向针对该帧正在执行的方法的类的常量池。此引用有助于支持动态链接。

    通常将C/C++代码编译为一个目标文件,然后将多个目标文件链接在一起以产生可用的工件,例如可执行文件或dll。在链接阶段,每个目标文件中的符号引用都用相对于最终可执行文件的实际内存地址替换。在Java中,此链接阶段是在运行时动态完成的。

    编译Java文件时,所有对变量和方法的引用都作为符号引用存储在类的常量池中。符号引用是逻辑引用,而不是实际指向物理内存位置的引用。

    这是James Blooms JVM Internals的链接,以获取更多详细信息。

    10-06 02:46