Pra*_*eek 4 java byte jvm bytecode short
java代码:,
byte a_b = 12;
short c_d = 14
Run Code Online (Sandbox Code Playgroud)
用字节码替换
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
Run Code Online (Sandbox Code Playgroud)
为什么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)
Run Code Online (Sandbox Code Playgroud)
因为(概念上)JVM堆栈上的最小数据单元是32位.所以没有办法只用8位增加堆栈的大小.
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.6.2
在任何时间点,操作数堆栈都具有相关联的深度,其中long或double类型的值对深度贡献两个单位,而任何其他类型的值贡献一个单位.
| 归档时间: |
|
| 查看次数: |
735 次 |
| 最近记录: |