Java虚拟机如何处理常数



所以我编译了此代码并将其分解为字节:

System.out.println("hi");

编译到:

getstatic
ldc
invokevirtual

从我在这里看到的内容,字面值" hi"并未以任何字体模式格式明确存储,因此.class文件还包含该程序堆栈的隐藏代表。例如,当我编译该程序时,.class文件包含该字节码,以及包含字面值" HI"的堆数据结构。更一般而言,.class文件不仅包含字节码(例如,堆,堆栈和寄存器的表示形式)。谢谢!

常数存储在类文件的单独部分中,而不是字节码,称为常数池。您可以在此处找到有关它们的更多信息:Java Constant Pool的目的是什么?

类文件格式在Java虚拟机规范中公开可用

最新更新