CallStub:函数指针直接触发机器指令

        上篇日志总结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程序,一边执行,通过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值