Java虚拟机如何处理常量

问题描述 投票:2回答:1

所以我编译了这段代码并将其反编译成字节码:

System.out.println("hi");

编译为:

getstatic
ldc
invokevirtual

从我在这里看到的,文字值“hi”没有以任何字节码格式显式存储,因此.class文件还包含该程序的堆栈的隐藏表示。例如,当我编译该程序时,.class文件将包含该字节码,以及包含文字值“hi”的堆数据结构。更一般地说,.class文件包含的不仅仅是字节码(例如堆,堆栈和寄存器的表示)。谢谢!

java
1个回答
3
投票

常量存储在类文件的单独部分中,而不是字节码,称为常量池。你可以在这里找到更多关于它们的信息:What is the purpose of the Java Constant Pool?

类文件格式在Java Virtual Machine Specification中公开

© www.soinside.com 2019 - 2024. All rights reserved.