Java 即时编译 JIT

Java中的JIT

class 编译成可执行的代码(原生型指令码)

JIT Compiler(Just-in-time Compiler) 即时编译
最早的Java建置方案是由一套转译程式(interpreter),将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被转译成十几或数十几个对等的微处理器指令,这种模式执行的速度相当缓慢。 针对这个问题,业界首先开发出JIT(just in time)编译器。当Java执行runtime环境时,每遇到一个新的类别(class:类别是Java程式中的功能群组),类别是Java程式中的功能群组-JIT编译器在此时就会针对这个类别进行编译(compile)作业。经过编译后的程式,被优化成相当精简的原生型指令码(native code),这种程式的执行速度相当快。花费少许的编译时间来节省稍后相当长的执行时间,JIT这种设计的确增加不少效率,但是它并未达到最顶尖的效能,因为某些极少执行到的Java指令在编译时所额外花费的时间可能比转译器在执行时的时间还长,针对这些指令而言,整体花费的时间并没有减少。 基于对JIT的经验,业界发展出动态编译器(dynamic compiler),动态编译器仅针对较常被执行的程式码进行编译,其余部分仍使用转译程式来执行。也就是说,动态编译器会研判是否要编译每个类别。动态编译器拥有两项利器:一是转译器,另一则是JIT,它透过智慧机制针对每个类别进行分析,然后决定使用这两种利器的哪一种来达到最佳化的效果。动态编译器针对程式的特性或者是让程式执行几个循环,再根据结果决定是否编译这段程式码。这个决定不见得绝对正确,但从统计数字来看,这个判断的机制正确的机会相当高。事实上,动态编译器会根据「历史资料」做决策,所以程式执行的时间愈长,判断正确的机率就愈高。以整个结果来看,动态编译器产生的程式码执行的速度超越以前的JIT技术,平均速度可提高至50%。

时间: 2024-10-26 14:49:40

Java 即时编译 JIT的相关文章

你的Java代码对JIT编译友好么?

JIT编译器是Java虚拟机(以下简称JVM)中效率最高并且最重要的组成部分之一.但是很多的程序并没有充分利用JIT的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用JIT的程度. 在本文中,我们将介绍一些简单的方法来验证你的程序是否对JIT友好.这里我们并不打算覆盖诸如JIT编译器工作原理这些细节.只是提供一些简单基础的检测和方法来帮助你的代码对JIT友好,进而得到优化. JIT编译的关键一点就是JVM会自动地监控正在被解释器执行的方法.一旦某个方法被视为频繁调用,这个方法就会被标记

浅析 JIT 即时编译技术

即时编译回顾 HotSpot 虚拟机执行 Java 程序时,先通过解释器对代码解释执行,发现某个方法或代码块执行比较频繁后,对热点代码进行编译,编译后生成与本地平台相关的机器码,再去执行机器码获得较高的运行效率.必要时,也会通过逆优化从即时编译回到解释执行,如编译器遇到罕见陷阱的情况. 在 Java 虚拟机规范中,并未要求虚拟机必须实现即时编译,但即时编译在主流的虚拟机中都有实现,后文所有讨论都基于 HotSpot 虚拟机. 即时编译器 HotSpot 虚拟机中有两个即时编译器,分别为 Clie

你的java 代码对JIT编译友好吗?

JIT编译器是Java虚拟机(以下简称JVM)中效率最高并且最重要的组成部分之一.但是很多的程序并没有充分利用JIT的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用JIT的程度. 在本文中,我们将介绍一些简单的方法来验证你的程序是否对JIT友好.这里我们并不打算覆盖诸如JIT编译器工作原理这些细节.只是提供一些简单基础的检测和方法来帮助你的代码对JIT友好,进而得到优化. JIT编译的关键一点就是JVM会自动地监控正在被解释器执行的方法.一旦某个方法被视为频繁调用,这个方法就会被标记

JVM中的 JIT 即时编译及优化技术

JVM Client 模式和 Server模式的区别 查看JVM模式 通过 java -version 可查看 JVM 所处的模式,并可以通过修改配置文件进行配置,那它们有什么区别呢? Server:-Server 模式启动时,速度较慢,但是启动之后,性能更高,适合运行服务器后台程序 Client:-Client 模式启动时,速度较快,启动之后不如 Server,适合用于桌面等有界面的程序 热点代码 理解 当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”. 热点代码

Eclipse Java class修改后的即时编译

通常情况下,修改了java文件,需要重启eclipse.但是myeclipse可以不用. 其实即时编译早就有了,通过简单配置javaRebel配置,可以达到修改java文件后不重启eclipse. 注: 本人使用tomcat跑项目,因此介绍eclipse中tomcat的配置 1),下载javaRebel jar包 官网下载地址: http://www.zeroturnaround.com/javarebel/download/  (需要注册账号,貌似license只有15天) 360云盘下载地址

转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析

重点 应用程序可以选择一个适当的即时编译器来进行接近机器级的性能优化. 分层编译由五层编译构成. 分层编译提供了极好的启动性能,并指导编译的下一层编译器提供高性能优化. 提供即时编译相关诊断信息的JVM开关. 像内联化和向量化之类的优化进一步增强了性能. OpenJDK HotSpot Java Virtual Machine被人亲切地称为Java虚拟机或JVM,由两个主要组件构成:执行引擎和运行时.JVM和Java API组成Java运行环境,也称为JRE. 在本文中,我们将探讨执行引擎,特别

Java中的JIT机制对运行速度的优化

JIT的起源 在先前的博客,Javac编译过程,简略讲述了Java compiler(javac),可以看出javac和C的compiler不一样, 并不是直接将 Java 的源代码 编译成成处理器的指令. 相反地,它产生的是统一规格.与机器 binary 格式无关的 bytecode. 在执行期,JVM 会逐条解释执行 bytecode, 这是为甚么 Java 在跨平台上会这么成功的主要原因, 你可以在某个平台上写完.build 一份,然后在其他的平台上头执行. 但是这也导致了严重的问题, i

深入分析Java的编译期与运行期

不知大家有没有思考过,当我们使用IDE写了一个Demo类,并执行main函数打印 hello world时都经历了哪些流程么? 想通过这篇文章来分析分析Java的执行流程,或者换句话说想聊聊Java的编译期与运行期的流程. 开门见山 编译期间都做了什么 运行期间都做了什么 1. 开门见山 public class MyApp { public static void main(String[] args) { System.out.println("hello world"); } }

深入了解JVM虚拟机8:Java的编译期优化与运行期优化

java编译期优化 微信公众号[Java技术江湖]一位阿里 Java 工程师的技术小站.作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux.网络.多线程,偶尔讲点Docker.ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!(关注公众号后回复”Java“即可领取 Java基础.进阶.项目和架构师等免费学习资料,更有数据库.分布式.微服务等热门技术学习视频,内容丰富,兼顾原理和实践,另外也将赠送作者原创的Java学习指南.