jit即时编译

yangfei629 yangfei629     2022-12-06     746

关键词:

1、Java执行过程


 

     Java文件通过javac静态编译为class文件

     class文件有2种方式执行:解释执行、JIT即时编译后执行

 

     通常情况下 默认解释器边解释边运行,但对于一些热点代码会首先编译为机器码,缓存起来,后续执行执行缓存的机器码即可,提升执行效率

技术图片

 

 

 

2、热点代码


 

     Java采用计数器方式确认是否是“热点”代码

     a. 方法调用次数 (方法调用计数器)

         一段时间内的执行次数,当超过一定的时间限度,若还是没有达到阈值,那么它的计数器会减少一半,此过程被称为热度衰减。这段时间称为“半衰周期”

         Client 模式下默认阈值是 1500 次,

         Server 模式下是 10000次,

         这个阈值可以通过 -XX:CompileThreadhold 来人为设定

         半衰周期通过-XX:CounterHalfLifeTime设定(单位秒,默认?),-XX:-UseCounterDecay可关闭半衰周期

 

     b. 方法体内某个循环次数 (回边计数器),

          这种情况也叫栈上替换(OSR编译),它没有半衰周期,因为就在一次方法调用中。

          -XX:OnStackReplacePercentage 来间接调整阈值

               在 Client 模式下, 公式为 方法调用计数器阈值(CompileThreshold)X OSR 比率(OnStackReplacePercentage)/ 100 。

                              其中 OSR 比率默认为 933,那么,回边计数器的阈值为 13995

               在 Server 模式下,公式为 方法调用计数器阈值(Compile Threashold)X (OSR (OnStackReplacePercentage)- 解释器监控比率 (InterpreterProfilePercent))/100
                             其中 onStackReplacePercentage 默认值为 140,InterpreterProfilePercentage 默认值为 33,如果都取默认值,那么 Server 模式虚拟机回边计数器阈值为 10700

 

 

方法计数器:

 

技术图片

 

回边计数器:

技术图片

 

 

3、JIT编译优化


JIT编译优化

a. 公共子表达式消除

    例:int d = ( c * b ) * 12 + a + ( a + b * c);
    当这段代码经过虚拟机即时编译器后,他将进行如下优化:减少了栈上操作。
       int d = E * 12 + a + ( a + E);
      有肯还会进行另一种优化:代数化简
        int d = E * 13 + a * 2;

b.  数组边界检查消除

     如在数组访问发生在循环之中,如果编译期只要通过数据流分析可以判断循环变量的取值范围永远在[0,foo.length)中,那在整个循环中就可以把数组的上下界检查消除,这可以节省很多次的条件判断

 

c. 方法内联

   技术图片

 

 

 d. 逃逸分析 带来的栈上替换、标量替换、锁消除

 

浅析jit即时编译技术

即时编译回顾HotSpot虚拟机执行Java程序时,先通过解释器对代码解释执行,发现某个方法或代码块执行比较频繁后,对热点代码进行编译,编译后生成与本地平台相关的机器码,再去执行机器码获得较高的运行效率。必要时,也... 查看详情

CUDA 表达式模板和即时编译 (JIT)

】CUDA表达式模板和即时编译(JIT)【英文标题】:CUDAExpressionTemplatesandJustinTimeCompilation(JIT)【发布时间】:2013-04-0814:41:16【问题描述】:我对使用CUDA进行即时(JIT)编译有一些疑问。我已经根据论文实现了一个基于表达式模板的库J.M.C... 查看详情

jvm虚拟机aot和jit即时编译(代码片段)

文章目录JVM虚拟机AOT和JIT即时编译1、AOT2、JITJVM虚拟机AOT和JIT即时编译1、AOTAOT是AheadOfTime,运行前编译与JIT编译对比JIT吞吐量高,有运行时性能加成,可以跑得更快,并可以做到动态生成代码等,但是相对启动... 查看详情

java即时编译jit

...可执行的代码(原生型指令码)JITCompiler(Just-in-timeCompiler)即时编译最早的Java建置方案是由一套转译程式(interpreter),将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能... 查看详情

转:什么是即时编译(jit)!?openjdkhotspotvm剖析

重点应用程序可以选择一个适当的即时编译器来进行接近机器级的性能优化。分层编译由五层编译构成。分层编译提供了极好的启动性能,并指导编译的下一层编译器提供高性能优化。提供即时编译相关诊断信息的JVM开关。像内... 查看详情

java虚拟机即时编译器技术jit

...术用以提升速度,尤其是与加载器操作相关的,被称为“即时”(Just-In-Time,JIT)编译器的技术。这种技术可以把程序全部或部分翻译成本地机器码(这本来是JVM的工作),程序运行速度因此得以提升。当需要装载某个类时,编译器... 查看详情

javajava即时编译(jit)器原理解析及实践

1.概述转载:Java即时编译(JIT)器原理解析及实践一、导读常见的编译型语言如C++,通常会把代码直接编译成CPU所能理解的机器码来运行。而Java为了实现“一次编译,处处运行”的特性,把编译的过... 查看详情

jit(上):tensorflow如何实现即时编译?

参考技术ATensorflow的JIT(just-in-time)是指在运行@tf.function修饰的python函数时,由jit、tf2xla和XLA一起完成一系列如子图构造、子图优化、图编译和图执行等操作。编译后的可执行程序--executable会存放到cache中,供再次调用时直接获... 查看详情

jit即时编译(史上最全)(代码片段)

...后面,水不知道有多深。首先,考察了大家对JVM即时编译组件的 查看详情

juc并发编程--jit即时编译器之锁清除(代码片段)

1.1锁消除导入相关依赖:因为JMH是JDK9自带的,如果是JDK9之前的版本需要加入如下依赖<dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-core</artifactId><version>1.23</version>&l 查看详情

java之jit(justintime)

...码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT编译器,不是Java虚拟机内必须的部分)。要了解HotSpot虚拟机内的即时编译器的运作过程,要解决几个 查看详情

jvm中的jit

...需要JIT编译呢?JIT编译器,是JustInTime编译的意思,又称即时编译。 Java程序是先从源代码编译到字节码,然后由Java虚拟机来解释执行字节码。当Java虚拟机在解释执行一个Java 查看详情

javac编译与jit编译

...效率就显得很低。于是后来在虚拟机中引入了JIT编译器(即时编译器),当虚拟机发现某个方法或代码块运行特别频繁时,就会把这些代码认定为“Hot Spot Code”(热点代码),为了提高热点代码的执行效率,在运行时,... 查看详情

jvm--运行期优化;jit(代码片段)

一、即时编译(JIT)JIT:JustInTimeCompiler,即时编译器这是针对解释型语言而言的,而且并非虚拟机必须,是一种优化手段。Hotspot就有这种技术,Java虚拟机标准对JIT的存在没有作出任何规范,这是虚... 查看详情

jvm--运行期优化;jit(代码片段)

一、即时编译(JIT)JIT:JustInTimeCompiler,即时编译器这是针对解释型语言而言的,而且并非虚拟机必须,是一种优化手段。Hotspot就有这种技术,Java虚拟机标准对JIT的存在没有作出任何规范,这是虚... 查看详情

jit编译

...么是jit编译:为了提高热点代码的执行效率,在运行时,即时编译器(JIT)会把这些代码编译成与本地平台相关的机器码,并进行各层次的优化,然后保存到内存中。在HotSpot虚拟机中,内置了两个JIT,分别为C1编译器和C2编译器... 查看详情

什么是 PHP8 JIT 编译器

...高性能的。【问题讨论】:【参考方案1】:PHP中的JIT(即时)编译器与其他解释型编程语言的工作方式相同。它在程序启动后运行并动态编译代码(在运行时)。在PHP8中,JIT将省略ZendVM,如果编译后的代码已经被缓存 查看详情

有没有像“编译时 JIT”这样的东西?

...布时间】:2014-07-1204:20:24【问题描述】:据我了解,JIT(即时编译)是指run-time过程,其中字节码被编译(翻译)为本机代码以提高运行时性能。另一方面,编译时评估是通用编程或运行时优化的常见做法。同样,据我了解,在... 查看详情