4.JVM机器指令集

机器指令 汇编语言 解释 对栈帧的影响
0x12 0x10 ldc #16 将常量池中第16个常量池项引用推到操作数栈栈顶。
常量池第16项是CONSTANT_UTF-8_INFO项,表示”Louis”字符串
4.JVM机器指令集
0x4c astore_1 操作数栈的栈顶元素出栈,将栈顶元素的值赋给index=1 的局部变量表元素上。

这里等价于:name = “Louis”.
4.JVM机器指令集
0x2b aload_1 将局部变量表中index=1的元素的值推到操作数栈栈顶 4.JVM机器指令集
0xb8 0x20 0x12 invokestatic #18 0xb8表示机器指令invokestatic,操作数是0x20 << 8| 0x12 = 18,操作数18表示指向常量池第18项,该项是main方法的符号引用:
org/louis/jvm/codeset/Bootstrap.greeting:(Ljava/lang/String;)V 
当JVM执行这条语句的时候,会做以下几件事:
a).方法符号引用校验。会校验这个方法的符号引用,按照这个符号规则 在常量池中查找是否有这个方法的定义,如果找到了此方法的定义,则表示解析成功。如果是方法greeting:(Ljava/lang/String;)V没有找到,JVM会抛出错误NoSuchMethodError
b).为新的方法调用创建新的栈帧。然后JVM会为此方法greeting创建一个新的栈帧(VM stack),并根据greeting中操作数栈的大小和局部变量的数量分别创建相应大小的操作数栈;然后将此栈帧推到虚拟机栈的栈顶。
c).更新PC指令计数器的值。将当前PC程序计数器的值记录到greeting栈帧中,当greeting执行完成后,以便恢复PC值。更新PC的值,使下一条执行的指令地址指向greeting方法的指令开始部分。
这条语句会使当前的main方法执行暂停,使JVM进入对greeting方法的执行当中当greeting方法执行完成后,才会恢复PC程序计数器的值指向当前下一条指令。
 
0xb1 return 返回  
       

机器指令 汇编语言 解释 对栈帧的影响
0x12 0x10 ldc #16 将常量池中第16个常量池项引用推到操作数栈栈顶。
常量池第16项是CONSTANT_UTF-8_INFO项,表示”Louis”字符串
4.JVM机器指令集
0x4c astore_1 操作数栈的栈顶元素出栈,将栈顶元素的值赋给index=1 的局部变量表元素上。

这里等价于:name = “Louis”.
4.JVM机器指令集
0x2b aload_1 将局部变量表中index=1的元素的值推到操作数栈栈顶 4.JVM机器指令集
0xb8 0x20 0x12 invokestatic #18 0xb8表示机器指令invokestatic,操作数是0x20 << 8| 0x12 = 18,操作数18表示指向常量池第18项,该项是main方法的符号引用:
org/louis/jvm/codeset/Bootstrap.greeting:(Ljava/lang/String;)V 
当JVM执行这条语句的时候,会做以下几件事:
a).方法符号引用校验。会校验这个方法的符号引用,按照这个符号规则 在常量池中查找是否有这个方法的定义,如果找到了此方法的定义,则表示解析成功。如果是方法greeting:(Ljava/lang/String;)V没有找到,JVM会抛出错误NoSuchMethodError
b).为新的方法调用创建新的栈帧。然后JVM会为此方法greeting创建一个新的栈帧(VM stack),并根据greeting中操作数栈的大小和局部变量的数量分别创建相应大小的操作数栈;然后将此栈帧推到虚拟机栈的栈顶。
c).更新PC指令计数器的值。将当前PC程序计数器的值记录到greeting栈帧中,当greeting执行完成后,以便恢复PC值。更新PC的值,使下一条执行的指令地址指向greeting方法的指令开始部分。
这条语句会使当前的main方法执行暂停,使JVM进入对greeting方法的执行当中当greeting方法执行完成后,才会恢复PC程序计数器的值指向当前下一条指令。
 
0xb1 return 返回