5

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 ?

另外,当我打开文件的字节码时

编辑:short var = 14 被 bipush 14 而不是 sipush 14 取代

是我的理解不清楚还是有错误?

在此处输入图像描述

我正在使用以下版本

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

1 回答 1

8

因为(概念上)JVM 堆栈上的最小数据单位是 32 位。所以没有办法只用 8 位来增加堆栈的大小。

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.6.2

在任何时间点,操作数堆栈都有一个关联的深度,其中 long 或 double 类型的值贡献两个单位的深度,而任何其他类型的值贡献一个单位。

于 2013-08-27T15:31:30.577 回答