【发布时间】:2013-08-27 15:11:59
【问题描述】:
java代码:,
byte a_b = 12;
short c_d = 14
用
替换字节码bipush 12 // expands byte1 (a byte type) to an int and pushes it onto the stack
sipush 14 // expands byte1, byte2 (a short type) to an int and pushes it onto the stack
为什么 jvm 会进行这种扩展,而不是使用 byte & short ?
当我打开文件的字节码时
EDIT : short var = 14 被 bipush 14 而不是 sipush 14 取代
是我的理解不清楚还是有bug?
我正在使用以下版本
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
【问题讨论】:
-
主要是因为这是他们定义它的方式,并且没有迫切需要以不同方式定义它。 (堆栈在概念上仅以 4 字节为增量递增/递减,尽管在 8 字节 JVM 中显然必须出现一点踢踏舞。)
-
bipush 是 2 个字节长,而 sipush 是 3 个字节长。为什么要使用较长的指令,而较短的指令也同样有效?
-
@HotLicks 查看从以下链接添加的快照 docs.oracle.com/javase/specs/jvms/se7/html/…
-
您的意思是“在任何时间点,操作数堆栈都有关联的深度,其中 long 或 double 类型的值对深度贡献两个单位,任何其他类型的值贡献一个单位。 “?
标签: java jvm byte bytecode short