上篇日志总结CPU调用函数时的栈内存变化过程,用的C程序解释成汇编来描述,目的是想说明,JVM在执行Java程序时,函数调用的过程和C程序函数调用的过程是相同的,C作为静态编译型的语言,在程序执行先需要编译成CPU能直接执行的二进制码,JVM执行Java程序时也需要先将其解释成字节码,或者说字节码指令集更准确,通常指令集是计算机硬件才有的东西,在开发语言上包装一套指令集,好处是可以统一规范,这样“统一的接口”让开发者用更加接近人类语言来调用机器指令,想想如果让你用汇编来写程序,movl、pop、inc、shl左移右移等,程序可读性没那么高,效率也没那么高。
JVM字节码指令
字节码指令作为中间语言,作用是帮助Java语言实现一些如栈操作,入栈出栈,传参读参,读写局部变化和函数调用等,例如最简单的控制指令,for循环、foreach循环、do…while循环、if…else和switch等。运算指令集有算术、逻辑、比较和位运算。数据交换指令集,用来操作栈内存、Java堆等,使用数据交换指令来实现数据在这些内存区域里面的交换,或者说传递,函数调用的指令集也在数据交换指令集中。
因为JVM本身就是用C和C++共同编写的解释性虚拟机,所以在执行Java程序时,最终是JVM交由C语言来运行,也就是说,JVM是一边将字节码指令翻译成C程序,一边执行,通过