位置: IT常识 - 正文

深入分析JVM执行引擎(深入了解jvm)

编辑:rootadmin
JVM执行引擎的作用就是将字节码指令解释或者编译为对应平台上的本地机器指令。简单来说,执行引擎充当了将高级语言翻译为机器语言的翻译者。 ...

推荐整理分享深入分析JVM执行引擎(深入了解jvm),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深度理解jvm,深度理解jvm,深入了解jvm,jvm运行机制详细,jvm执行顺序,jvm执行顺序,jvm执行java类的过程,jvm执行顺序,内容如对您有帮助,希望把文章链接给更多的朋友!

程序和机器沟通的桥梁

一、闲聊

相信很多朋友在出国旅游,或者与外国友人沟通的过程中,都会遇到语言不通的烦恼。这时候我们就需要掌握对应的外语或者拥有一部翻译机。而笔者只会中文,所以需要借助一部翻译器才能与不懂中文的外国友人交流。咱们的执行引擎就类似于这部“翻译机”。

二、概述

执行引擎的作用就是将字节码指令解释或者编译为对应平台上的本地机器指令。简单来说,执行引擎充当了将高级语言翻译为机器语言的翻译者。对于Hotspot虚拟机,执行引擎中包含两部分:解释器和JIT编译器(即时编译器)。下图是执行引擎的原理:

三、解释器

解释器所承担的角色就是一个运行时翻译者,将字节码文件中的内容翻译为对应平台的本地机器码指令。当一条字节码指令被解释执行后,接着再根据pc寄存器中记录的下一条需要被执行的字节码指令执行解释操作。JVM解释器一共有两套,一套是远古的字节码解释器,另一套是现在普遍使用的模板解释器。

1、字节码解释器

字节码解释器在执行过程中通过纯软件代码模拟字节码执行,效率非常低。

2、模板解释器

模板解释器将每一条字节码和一个模板函数关联,模板函数中直接产生这条字节码指令执行时的机器码,从而提高了解释器的性能。在常用的HotSpot VM中,解释器主要由Interpreter模板和code模块构成。Interpreter模板:实现了解释器的核心功能。code模块:用于管理HotSpot VM在运行时生成的本地机器码指令。

四、即时编译器(JIT编译器)

即时编译器的目的是避免函数被解释执行,而是将整个函数体编译成机器码指令,每次函数执行时,只执行编译后的机器码即可,这种方式可以大大的提高效率。

1、热点代码及探测方式深入分析JVM执行引擎(深入了解jvm)

当然,是否需要JIT编译器将字节码直接编译成对应平台的机器码,需要根据代码被调用的执行频率而定。需要被JIT编译器编译成机器码的字节码,也称为热点代码,JIT编译器会对热点代码做出深度优化,将其从字节码编译成机器码,并缓存到方法区,提高代码的执行效率。JIT编译的方式发生在方法执行过程中,因此也被称之为_栈上替换_,或简称OSR(On Stack Replacement)编译。通过热点探测的方法,判断一个方法被调用多少次,或循环体执行多少次才可以达到阈值,进行编译。而Hotspot VM热点探测的方式是基于计数器实现的。这种基于技术的热点探测方式又分为两种:1.方法调用计数器 2.回边计数器

关于栈上替换这里笔者不展开赘述,有兴趣的小伙伴可以自行了解下

1.1方法调用计数器

方法调用计数器用于统计方法调用次数,它的默认阈值是client模式下是1500次,在server模式下是10000次。超过这个阈值,就会触发JIT编译。当然,这个阈值也可以通过修改虚拟机参数-XX:CompileThreshold来手动指定。当一个方法被调用的时候,会优先检查该方法是否被JIT编译过,如果存在,则优先使用编译过的本地代码来执行,如果不存在,则将此方法的调用计数器加一,然后再判断计数器的值是否超过配置的阈值。如果已经超过了,就会向JIT编译器提交一个该方法的编译请求。下面是方法调用计数器执行的流程图:关于方法调用计数器,如果不做任何设置,方法调用计数器统计的并不是方法被调用的绝对次数,而是一个相对执行的频率。当超过一定的时间限度,如果方法的调用次数仍然达不到阈值,那这个方法的调用计数器就会被减少一半,这个过程称为方法调用计数器的热度衰减,而这段时间被称作为该方法的半衰周期。进行热度衰减的过程是虚拟机进行垃圾回收的时候顺便进行的,举手之劳而已。可以使用虚拟机参数-XX:-UseCounterDecay来关闭热度衰减。这样的话,只要运行时间足够长,绝大部分方法都会被编译成本地代码。最后,还可以使用-XX:CounterHalfLifeTime参数设置半衰周期的时间,单位为秒。

1.2回边计数器

它的作用是统计一个方法中循环体代码执行次数,在字节码中遇到控制流向后,跳转的指令称为“回边”。显然,建立回边计数器统计的目的是为了触发OSR编译。下面是回边计数器执行的流程图:

关于OSR编译上文中有提到

2、即时编译器分类

在Hotspot VM中,内嵌有两个JIT编译器,分别为client compiler和server compiler,但是大多数情况下我们简称C1编译器和C2编译器。可以通过命令显示的指定JVM在运行时到底使用哪种JIT编译器。

2.1 c1编译器

指定Java虚拟机运行在client模式下,使用C1编译器。C1编译器会对字节码进行简单和可靠的优化,耗时短。以达到更快的编译速度,但是编译后的代码执行速度相对慢。C1编译器主要有方法内联,去虚拟化,冗余消除。

方法内联:将引用的函数代码编译到引用点处,这样可以减少栈帧的生成,减少参数传递以及跳转过程。去虚拟化:对唯一实现的类进行内联。冗余消除:在运行期间把一些不会执行的代码叠掉。2.2 c2编译器

指定Java虚拟机运行在server模式下,使用C2编译器。C2编译器对代码优化时间长,编译时间也长。但是编译后的代码执行速度比较快。C2的优化主要在全局层面,逃逸分析式优化的基础。基于逃逸分析,C2上有如下几种优化:

标量替换:用标量值代替聚合对象的属性值。栈上分配:对于未逃逸的对象分配在栈上而不是堆上。同步消除:清楚同步操作,通常指synchronized。2.3 Graal编译器

JDK10起,在C1编译器和C2编译器之后,HotSpot VM新增了一个Graal即时编译器。编译效果短短几年的时间就追平了C2编译器。目前,带着“实验状态”标签,需要使用开关参数-XX:+UnlockExperimentalVMOptions,-XX:+UseJVMCICompiler去激活这个编译器,才能使用。

五、解释器和JIT并存

为什么需要解释器和JIT并存,原因有几点:

当程序启动的时候,解释器可以马上发挥作用,省去编译的时间。编译器想要执行,需要把字节码编译成本地机器码,并且缓存编译后的机器码,编译需要一定的时间。编译后的本地机器码,执行效率高。所以,在两种并存的模式下,解释器首先发挥作用,而不必等到即时编译器全部编译完在执行,这样可以省去不必要的编译时间。随着程序继续不断运行,编译器发挥作用,根据热点探测功能,把越来越多的字节码编译成本地机器码,获得更高的执行效率。六、执行引擎执行程序的方式

在默认的情况下,HotSpot VM采用的是解释器和JIT编译器并存的架构,当然读者可以根据具体的应用场景,通过虚拟机参数,为虚拟机指定在运行时到底是完全采用解释器执行,还是完全采用即时编译器执行。

-Xint:完全采用解释器模式执行程序-XComp:完全采用即时编译器模式执行程序。如果即时编译器出现问题,解释器会介入执行;-Xmixed:采用解释器+即时编译器的混合模式共同执行程序,HotStop VM默认就是这个模式。
本文链接地址:https://www.jiuchutong.com/zhishi/310171.html 转载请保留说明!

上一篇:python中卡方分布如何使用?(python卡方分布随机数)

下一篇:js中co模块的介绍(javascript 模块)

  • 最简单粗爆的网络推广方法(很简单的网名)

    最简单粗爆的网络推广方法(很简单的网名)

  • 三星隐藏应用怎么打开(三星隐藏应用怎么快速打开)

    三星隐藏应用怎么打开(三星隐藏应用怎么快速打开)

  • 华为p40自带手机膜的吗(华为p40自带手机壳怎么样)

    华为p40自带手机膜的吗(华为p40自带手机壳怎么样)

  • 微信如何看自动续费服务(微信如何看自动续费的服务)

    微信如何看自动续费服务(微信如何看自动续费的服务)

  • explorer++可以卸载吗(explorer.exe如何删除)

    explorer++可以卸载吗(explorer.exe如何删除)

  • 苹果x没有指纹锁吗(苹果13有没有指纹)

    苹果x没有指纹锁吗(苹果13有没有指纹)

  • u盘2.0和3.0的接口可以通用吗(u盘usb 2.0和3.0有什么区别)

    u盘2.0和3.0的接口可以通用吗(u盘usb 2.0和3.0有什么区别)

  • windows7启动黑屏进不了系统(windows7启动黑屏只有鼠标操作没有反应)

    windows7启动黑屏进不了系统(windows7启动黑屏只有鼠标操作没有反应)

  • 苹果6苹果11系列充电器一样吗(苹果6和苹果11区别)

    苹果6苹果11系列充电器一样吗(苹果6和苹果11区别)

  • 小米10充电发烫怎么回事(小米10充电发烫是什么原因)

    小米10充电发烫怎么回事(小米10充电发烫是什么原因)

  • win7连上无线网络但不能上网(win7连上无线网不能上网)

    win7连上无线网络但不能上网(win7连上无线网不能上网)

  • 小米note4上市时间(小米note4最新)

    小米note4上市时间(小米note4最新)

  • nova65g和mate305g对比(华为nova65g和mate305g哪个好)

    nova65g和mate305g对比(华为nova65g和mate305g哪个好)

  • iphone检测到液体无法充电(iphone检测到液体无法充电还能继续用吗)

    iphone检测到液体无法充电(iphone检测到液体无法充电还能继续用吗)

  • 表格的作用(说明文中表格的作用)

    表格的作用(说明文中表格的作用)

  • xsmax电量百分比怎么设置(xsmax手机电池显示百分比)

    xsmax电量百分比怎么设置(xsmax手机电池显示百分比)

  • word页面变小怎么恢复(word页面变很小)

    word页面变小怎么恢复(word页面变很小)

  • 手机qq怎么图片文字一起发(手机qq怎么图片和文字一起发消息)

    手机qq怎么图片文字一起发(手机qq怎么图片和文字一起发消息)

  • 红米note8怎么设置手电筒快捷键(红米note8怎么设置指纹解锁)

    红米note8怎么设置手电筒快捷键(红米note8怎么设置指纹解锁)

  • 荣耀v20充电多少w(荣耀v20充电需要多少时间)

    荣耀v20充电多少w(荣耀v20充电需要多少时间)

  • 魅族16T可以升5G吗(魅族16t支不支持5g)

    魅族16T可以升5G吗(魅族16t支不支持5g)

  • realme 耗电快怎么办(realme手机费电快)

    realme 耗电快怎么办(realme手机费电快)

  • window10运行在哪(window10里运行在哪里)

    window10运行在哪(window10里运行在哪里)

  • 小米8se是锂电池吗(小米8se电池电压是几伏)

    小米8se是锂电池吗(小米8se电池电压是几伏)

  • 苹果键盘蓝牙键是哪个(苹果蓝牙键盘使用教程)

    苹果键盘蓝牙键是哪个(苹果蓝牙键盘使用教程)

  • 5g怎么开通(5g怎么开通苹果13)

    5g怎么开通(5g怎么开通苹果13)

  • 闲鱼虚拟物品申请退款(闲鱼虚拟物品申请退款时间)

    闲鱼虚拟物品申请退款(闲鱼虚拟物品申请退款时间)

  • TS中的泛型(泛型 static)

    TS中的泛型(泛型 static)

  • 税后经营净利润怎么求
  • 印花税不足1元需要缴纳吗
  • 劳务税是什么 和个税的区别
  • 印花税贴花是什么时候取消的
  • 保理公司发放贷款
  • 去年的财务报表可以更正申报吗
  • 淘宝买货没有发票
  • 工作未满12个月被辞退时前月平均工资怎么计算
  • 融资租赁租入固定资产折旧可以税前扣除吗
  • 车间不生产时折旧怎么算
  • 已经使用的固定资产其变动方式等基础资料将
  • 开具发票有哪些特殊规定?
  • 一般户开户行可以开增值税专票么
  • 天猫运费险是按照每一单结算的吗
  • 收到免税发票会影响税负吗
  • 进项税和销项税抵扣的会计分录
  • 失业保险费退还计入什么科目
  • 公司房产税如何计算器
  • 超市里销售
  • 工程部物品领用表格模板
  • 电子发票可以开专票吗
  • 小规模纳税人增值税免征额
  • 工程管理咨询费计入什么科目
  • 苹果mac dns设置
  • 带息负债融资成本率意义
  • 鸿蒙工具箱使用视频
  • php分页函数封装
  • window10发现威胁怎么办
  • 视同销售要做收入?
  • 资金占用利息会计处理
  • vue引入echarts柱状图
  • php变量底层实现
  • springboot常用
  • 预付购买材料款属于什么会计科目
  • 生产企业出口退税申报流程操作
  • 公司交纳社会保险多少钱
  • 公司股东年底分红怎么做账
  • vue前端加密
  • 会计打印发票请求怎么写
  • 数据分析利器:pandas库的应用课后答案
  • eterm指令退出a
  • 残保金是应交税金吗
  • 律师事务所要交残保金吗
  • 结算备付金管理办法(2019年修订版)
  • 收到专票不认证不抵扣可以吗
  • 从公账发工资是什么凭证
  • 承兑汇票兑现与贴现的区别
  • 企业送的购物卡怎么退回去
  • python项目开发案例集锦pdf百度网盘
  • mongodb开启
  • 企业转让固定资产增值税税率
  • 银行存款产生的利息收入
  • 分包工程款的账务处理
  • mysql的启动方法(windows 平台)
  • 金税三期业务操作手册
  • 融资租入固定资产改建支出计入
  • 增值税申报表里期初未缴税额是什么意思
  • 毛利差怎么计算公式
  • 代理赚差价违法吗
  • 学校收到政府补助的会计分录
  • 养猪场财务账目怎么做
  • 公司发放工资的形式
  • 累计折旧用什么账页格式
  • debian 安装
  • winxp wifi 无法连接
  • win10如何配置
  • git连接linux服务器
  • qcwlicon.exe - qcwlicon是什么进程 有何作用
  • 如何修改windows默认语言
  • qqlogin.exe是什么进程 qqlogin.exe应用程序错误解决办法
  • keyword是啥
  • excel的exceladdinrd加载项出现问题
  • LayoutInflater.inflate方法解析
  • css控制图片置灰
  • 酷狗模拟器
  • 教女朋友学粤语
  • python程序员必读书籍
  • unity导入max文件
  • javascript运行速度
  • Windows上使用PD虚拟机
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设