JVM架构 |栈式指令集与寄存器指令集有什么区别?

文章目录

  • 一、两种指令集的区别
  • 二、代码直观演示两种指令集架构
  • 三、基于栈的解释器执行过程
  • 四、总结

一、两种指令集的区别

指令集的架构模型分为基于栈的指令集架构基于寄存器的指令集架构两种,HotSpot虚拟机中的任何操作都需要入栈和出栈的步骤,即使用栈来管理运行,而HotSpot本身就是基于栈的指令集架构
基于寄存器架构的指令集典型应用是传统PC上x86的二进制指令集、Android的Davlik虚拟机(Google在Android上就选择了此种方案)。

下图展示了两种指令集架构的区别:

二、代码直观演示两种指令集架构

下面举个例子,分别使用这两种指令集计算2+3的结果

在IDEA中对2+3操作进行javap -v反编译,得到了8行指令集。这里只需要要和基于寄存器得出的指令集做一个直观的对比即可,更详细的执行栈式执行过程可以参照下文给出的另一个例子。

而使用寄存器架构对2+3操作的指令集只有下面两行

三、基于栈的解释器执行过程

下面通过一段Java代码,演示虚拟机中的字节码是如何执行的

stack=2,locals=4可以看到Javap提示这段代码需要深度为2的操作数栈和4个变量操的局部变量空间。

bipush指令的作用是将单字节的整形常量值(-128~127)推入操作数栈顶端,跟随有一个参数,指明推送的常量值是多少,这里是100。

istore_1指令的作用是将操作数栈顶的整型值出栈并存放到第1个局部变量槽中。 后续4条指令(直到偏移为11的指令为止) 都是做一样的事情, 也就是在对应代码中把变量
a、 b、 c赋值为100、 200、 300。 这4条指令的图示略过。

iload_1指令的作用是将局部变量表第1个变量槽中的整型值复制到操作数栈顶端。

iload_2指令的执行过程与iload_1类似, 把第2个变量槽的整型值入栈。

iadd指令的作用是将操作数栈中头两个栈顶元素出栈, 做整型加法,然后把结果重新入栈。 在iadd指令执行完毕后, 栈中原有的100和200被出栈,它们的和300被重新入栈。

iload_3指令把存放在第3个局部变量槽中的300入栈到操作数栈中。 这时操作数栈为两个整数300。 下一条指令imul是将操作数栈中头两个栈顶元素出栈, 做整型乘法, 然后
把结果重新入栈, 与iadd完全类似, 故省略图示。

ireturn指令是方法返回指令之一, 它将结束方法执行并将操作数栈顶的整型值返回给该方法的调用者。 到此为止, 这段方法执行结束。

四、总结

由于跨平台性的设计,Java的指令都是根据栈式指令集架构来设计的。不同平台CPU架构不同,所以不能设计为寄存器架构的。栈式架构的优点是跨平台,指令集小,编译器容器实现;缺点是性能下降,实现相同的功能需要更多的指令。

面试题:时至今日,HotSpot虚拟机的宿主环境已经不局限于嵌入式平台了,那么为什么不将架构更换为性能更好的寄存器指令集架构呢?

两种指令集架构各有优劣,并存发展。首先,在设计和实现上,基于栈式的架构更简单。其次无论平台的资源是否受限制,基于栈式的架构都是可以使用的。(针对栈式的优点,可以继续balabala…)

(0)

相关推荐

  • 显微镜下的 i 与 i

    低并发编程,周一很颓废,周四很硬核 注意,以下讨论的语言是 Java 这个问题被网上的好多文章写烂了,但基本重复度很高,我看过后的感觉是,大部分都是错误的.误导读者的. 随便百度一下,我们打开第一条. ...

  • JVM 字节码指令

    本文部分摘自<深入理解 Java 虚拟机> 简介 Java 虚拟机的指令由操作码 + 操作数组成,其中操作码是代表某种特定操作含义的数字,长度为一个字节,而操作数就是此操作所需的一个或多个 ...

  • Java 虚拟机栈之栈帧中的这些概念分析

    Java 虚拟机以方法作为基本的执行单元,"栈帧(Stack Frame)"则是用于支持 Java 虚拟机进行方法调用和方法执行的基本数据结构.每一个栈帧中都包含了局部变量表.操作 ...

  • 一、JVM与Java体系结构

    文章目录 1. 虚拟机与Java虚拟机 2. JVM的位置 3. Java的体系结构 4. JVM整体结构 5. Java代码执行流程 6. JVM的架构模型 7. JVM生命周期 8. JVM发展历 ...

  • 全球知名测量仪器公司成功收购量子基准,欲打造全栈式量子解决方案

    是德科技 (Keysight Technologies) (NYSE: KEYS) 是一家全球知名的测量仪器公司,为电子设计.电动交通.网络监控.5G.LTE.物联网.智能互联汽车等提供测试解决方案, ...

  • 「芯片 AI 算力 AI 开发平台」,合肥君正公布全栈式低功耗 AI 技术

    2021-05-20 23:27:36·AI掘金志 4大亮点.5大竞争力,合肥君正「AIE Magik」对垒智能视觉领域. 习惯在针尖上跳舞的合肥君正,在萌芽之时就认识到AI的重要性. 2014年前后 ...

  • 全铝车身新路虎卫士上海街区亮相,D7X架构承载式,强度提高10倍

    说到路虎汽车,在国内十分流行,路虎的外观设计,几乎看不到模仿的痕迹,有自己的设计语言,路虎汽车给人最直观的印象是非常有气势,外观硬朗,是男人的象征,随着汽车时代的发展与进步,很多硬派越野车的设计,都转 ...

  • JVM之栈 Java Stack

    JVM之栈 Java Stack

  • 神州数码发布云原生数字原生战略 推动IT架构颠覆式创新

    本报记者 贺俊 近日,在由神州数码集团.神州信息.神州控股共同主办的"Tech数字中国2021技术年会"上,神州数码集团正式发布新技术战略,新战略将聚焦云原生数字原生,展开新一轮技 ...

  • 橇装式加油站和流动加油车有怎样区别?

    一直以来,国内在成品油经营方面,除了正规的普通加油站外,还存在非法的黑油站及流动加油车,给社会造成了重要影响. 随着橇装式加油站的出现,这些现象得到很好地解决,那么它与流动加油车有什么区别呢? 橇装式 ...

  • 吸气式和吹气螺丝机的区别

    吸气式结构简单,制造周期比较短.主要特点为:如果需锁附的螺丝太小或太短,吸气式(管道输送)的机器就不能实现自动送钉,需要此机器,机械人带动电批吸取螺钉并移动锁紧(一颗一颗逐点锁螺钉). 螺丝主要是通过 ...

  • 日式面包和欧式面包有什么区别?

    刚开始接触面包的时候,小编只知道小餐包和吐司,不用整形的圆球就是餐包,需要分割成三份再整形的是吐司,对更多的面包种类完全不了解,什么乡村面包.贝果.黑麦面包.佛卡夏一概不知道,相信很多新手朋友和我当时 ...

  • 20年“炼出”国内首个自主CPU指令集架构,龙芯凭什么?| 国产芯片四大件

    发展核心技术不要幻想弯道超车,像芯片这样的高复杂系统能力建设需要以30年为周期 " 作者 | 包永刚 出品 | 雷锋网产业组 2020年8月国务院印发的<新时期促进集成电路产业和软件产 ...