Java虚拟机整型数加载指令学习

JVM中 int 类型数值,根据 取值范围将 入栈的 字节码指令 就分为4类:

    取值 -1~5 采用 iconst 指令;

    取值 -128~127 采用 bipush 指令;

    取值 -32768~32767 采用 sipush指令;

    取值 -2147483648~2147483647 采用 ldc 指令。

不同范围,不同字节数的,整型数据采用不同的加载指令;看上去是为了性能;

一个示例;

public class loaddemo  
{  
    public static void main(String args[]) {  

        int myi = 5;
        int myj = -1;

        int mybb = 127;
        int myds = 32767;

        int myzds = Integer.MAX_VALUE;

     }   
} 

编译并反编译后如下;

Java虚拟机整型数加载指令学习_第1张图片

 

从 Constant pool(冒号) 到大括号开始,是常量池;

看一下对应的指令分别是,
    iconst_5
    iconst_m1
    bipush 127
    sipush 32767
    ldc #3    // int 2147483647

 

你可能感兴趣的:(Java,汇编语言,java,开发语言,iconst,bipush)