`
backend-develop
  • 浏览: 25091 次
社区版块
存档分类
最新评论

浅析 JIT 即时编译技术

    博客分类:
  • Java
阅读更多

即时编译回顾

HotSpot 虚拟机执行 Java 程序时,先通过解释器对代码解释执行,发现某个方法或代码块执行比较频繁后,对热点代码进行编译,编译后生成与本地平台相关的机器码,再去执行机器码获得较高的运行效率。必要时,也会通过逆优化从即时编译回到解释执行,如编译器遇到罕见陷阱的情况。

 

 

在 Java 虚拟机规范中,并未要求虚拟机必须实现即时编译,但即时编译在主流的虚拟机中都有实现,后文所有讨论都基于 HotSpot 虚拟机。

 

 

即时编译器

HotSpot 虚拟机中有两个即时编译器,分别为 Client Compiler 和 Server Compiler,简称为 C1 编译器和 C2 编译器。C1 编译器占用内存小,进行局部优化,代码执行效率比 C2 编译器低,适用于客户端应用; C2 编译器占用内存大,进行全局优化,代码执行效率比 C1 编译器高,适用于服务端应用。在 JDK 1.7 以后的 HotSpot 虚拟机中,采用了被称为分层编译的策略,启动时解释执行提高启动速度,然后 C1 编译获取较好的编译速度,再 C2 编译获取较好的编译质量。

 

默认情况下,虚拟机会自动选择合适的编译器与解释器一起配合工作,用户也可以在启动参数里使用 “-client” 或 “-server” 来强制要求虚拟机使用某一种编译器。编译器与解释器一起配合工作的模式,被称为混合模式。用户也可以在启动参数里使用 “-Xint” 来要求虚拟机只使用解释器,使用 “-Xcomp” 来要求虚拟机只使用编译器。

 

被多次调用的方法和被多次执行的循环体,就是即时编译器关注的热点代码。在 HotSpot 中,采用了基于计数器的热点探测技术,为每个方法定义了两个计数器:方法调用计数器、回边计数器。

 

默认情况下,如果一段时间内方法调用计数器的值没有超过虚拟机设置的阈值,则在垃圾回收时计数器会热度衰减,数值减少 1/2,此时间范围又被称为半衰期。所以方法调用计数器中存储的实际上并不是方法调用的绝对次数。用户可以调整半衰期的值,甚至可以关闭热度衰减。

 

回边计数器则统计了循环体执行的绝对次数,它的阈值可以由方法调用计数器的阈值计算出来。如果回边计数器发生溢出,也会把方法调用计数器调整为溢出。

 

调用方法时,如果两个计数器之和超过了方法调用计数器的阈值,就会提交方法的编译请求。循环体执行时,如果两个计数器之和超过了回边计数器的阈值,也是编译代码块所在的方法,因为此时方法正在执行中,又被称为栈上替换,即替换方法时方法的栈帧还在栈上。

 

默认情况下,编译器在后台进行编译,即调用热点代码发现需要编译时,先以解释方式继续执行,向编译器发送编译请求,编译结束后下次调用时才使用编译的本地代码。用户也可以通过启动参数来要求虚拟机禁止后台编译,编译结束前热点代码的执行处于阻塞状态。

 

 

优化技术

HotSpot 虚拟机使用了很多种优化技术,这里只简单介绍其中的几种,完整的优化技术介绍可以参考官网内容。

 

公共子表达式消除:

如果一个表达式已经进行过计算,并且在下次用到之前依赖的变量没有变化,即表达式的计算结果不会发生变化,则在下次使用这个表达式时直接使用计算的结果。

 

数组边界检查消除:

在 Java 中访问数组时,会自动进行边界检查来防止数组下标越界。但是对于某些情况并不需要每次访问都去检查,如在一个循环中遍历数组元素,如果虚拟机能够确定下标不会发生越界并且优化确实能够提高运行速度,则虚拟机会去除每次访问的下标检查。

 

方法内联:

对于可以内联的方法,直接复制到调用者代码中,减少方法调用次数和性能消耗。

 

逃逸分析:

方法中定义的一个对象,如果会被其他方法访问则称为方法逃逸,如果会被其他线程访问则称为线程逃逸。对于不能逃逸的对象,HotSpot 虚拟机采用了栈上分配、同步消除、标量替换等方法进行优化。

 

每周 3 篇学习笔记或技术总结,面向有一定基础的 Java 程序员,内容涉及 Java 进阶、虚拟机、MySQL、NoSQL、分布式计算、开源框架等多个领域。关注作者或微信公众号 backend-develop 第一时间获取最新内容。

浅析 JIT 即时编译技术 | 后端开发那点事儿

0
0
分享到:
评论

相关推荐

    浅析dalvik虚拟机JIT技术的实现.doc

    Dalvik虚拟机,作为Android早期的核心组件,引入了即时编译(Just In Time, JIT)技术,显著提升了应用程序的运行效率。本文旨在深入探讨Dalvik虚拟机中JIT技术的实现原理,以及其在Android平台上的应用。 #### ...

    Avm2虚拟机浅析与as3性能优化

    - **即时编译(JIT)模式**:而对于复杂的计算密集型代码段,AVM2会将其通过JIT编译器转换为本地机器代码,这样可以显著提升这些代码段的执行速度。这种方式还允许进行运行时优化,例如常量传播、死代码消除等。 ##...

    浅析JVM

    - **高效性**:通过即时编译器(JIT Compiler),可以将字节码编译成本地机器码,提高了执行效率。 #### 二、JVM运行时数据区 JVM在运行时会划分多个内存区域来管理数据,主要包括以下几个部分: - **方法区**:...

    浅析计算机软件JAVA编程的特点及应用.zip

    在性能上,Java通过即时编译(JIT)技术将字节码转化为机器码,提升了运行效率。并且,Java内存管理的垃圾回收机制自动处理不再使用的对象,减少了内存泄漏的问题,让开发者可以更专注于业务逻辑。 Java在计算机...

    apache-jmeter-5.6.3 带插件

    apache-jmeter-5.6.3 带插件

    第六章:Python tkinter 库入门与进阶:构建精美用户界面

    内置源程序供读者参考学习

    Java毕业设计-SpringBoot+Vue的校园台球厅人员与设备管理系统(附源码、数据库、教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    MATLAB设计的图像去雾设计(GUI界面设计).zip

    MATLAB设计的图像去雾设计(GUI界面设计)

    2023年江苏省计算机二级考试VB试题分类汇总及答案.pdf

    2023年江苏省计算机二级考试VB试题分类汇总及答案.pdf

    基于SpringBoot+Vue的线上买菜系统(Java毕业设计,包括源码、数据库、教程).zip

    Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    基于SSM+JSP的美食推荐管理系统+数据库(Java毕业设计,包括源码,教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4

    2023年微型计算机原理试题库及答案.pdf

    2023年微型计算机原理试题库及答案.pdf

    联邦基金有效利率历史数据.xlsx

    美联储在2024年9月18日宣布将其调50个基点,降至4.75%至5.00%之间的水平。这是美联储自2020年3月以来首次降息,也是自2023年7月将利率水平调升至历史高位后的首次下调,标志着货币政策由紧缩周期向宽松周期的转向 数据名称:美国联邦基金有效利率、目标利率历史数据 样本数量:12667条 数据年份:1990.1-2024.9 数据说明:包括有效利率、目标利率 更新日期:2024年9月

    2023年专升本计算机基础习题答案.pdf

    2023年专升本计算机基础习题答案.pdf

    springboot基于SpringBoot的CSGO赛事管理系统 LW PPT.zip

    ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文

    Java毕业设计-SpringBoot+Vue的校园疫情防控系统(附源码、数据库、教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    基于SpringBoot+Vue的医患档案管理系统(Java毕业设计,包括源码、数据库、教程).zip

    Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    基于SpringBoot+Vue的在线考试(Java毕业设计,包括源码、数据库、教程).zip

    Java 项目,仅供学习参考。 Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    【工程项目】MATLAB教室人数统计(GUI框架,定位和分割人脸,计数).zip

    【工程项目】MATLAB教室人数统计(GUI框架,定位和分割人脸,计数)

    2023年山东专升本计算机真题及答案.pdf

    2023年山东专升本计算机真题及答案.pdf

Global site tag (gtag.js) - Google Analytics