其他分享
首页 > 其他分享> > JIT 知识总结

JIT 知识总结

作者:互联网

编译型与解释型语言

  1. 编译型语言
    程序以编译后的二进制汇编交付,汇编码针对于特定CPU。
    优点:

    • 编译器有足够程序的信息对代码进行优化,运行速度快。
      缺点:
    • 平台相关,需要兼容CPU所用的指令集。
  2. 解释型语言
    只要机器上有适合的解释器,就可以运行。
    优点:

    • 平台无关,只要有解释器,就可以运行。
      缺点:
    • 运行速度慢
  3. 关于JAVA
    JAVA应用会被编译,但是并非编译成特定CPU专用的二进制代码,而是另一种字节码--JAVA字节码。这种代码能够用java运行(像解释器一样)。
    所以JAVA变成了一种独立于平台的解释型语言
    又因为它是理想化的二进制代码,所以执行时也会被编译成平台特定的二进制代码--->编译在程序执行时进行,所以有了JIT(Just In Time Compiler)

    JAVA文件被编译成中间语言--->JAVA字节码。运行时,被JVM进一步编译成汇编语言。在字节码--->汇编的过程中,会有大量的优化,改善程序的性能。

    以上也是JAVA被叫做“半编译半解释型语言”的原因。

热点编译

编译器类型

  1. Client 编译器(C1)
    启动运行快,但是代码优化少。
  2. Server 编译器(C2)
    需要更多的时间进行代码的编译,优化代码。热身结束后,应用运行快。
  3. 分层编译(C1 C2混合)
    代码先由C1编译运行,随着代码变热,由C2重新编译。
    JAVA 8 中,分层编译是默认开启的。-XX:+TieredCompilation
    分层编译的启动时间很接近C1的启动时间。

一般在选择编译方式的时候,都会选择分层编译。
如果任务量是固定的,就需要测试三种编译器编译应用的运行速度,选择优势最大的。

java version "17.0.2" 2022-01-18 LTS
Java(TM) SE Runtime Environment (build 17.0.2+8-LTS-86)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)

在查看JAVA版本时,mixed mode,指的就是解释执行和编译执行搭配使用。

编译器调优

  1. 编译线程
    根据CPU的数量不同,JVM会开启不同数量的C1,C2线程。
  2. 方法内联。
    默认开启。-XX:+Inline.
    对性能影响很大,一般不要关闭。
  3. 逃逸分析
    最复杂的优化方法。
    默认开启。-XX:+DoEscapeAnalysis
    开启逃逸分析后,能够获得以下优化:
    • 栈上分配
      对象的分配从堆的分配变为栈上分配,这样能够避免GC。
      因为随着栈帧的消亡,对象也就不存在了。
    • 同步省略(锁消除)
      如果对象只会被一个线程访问,就可以不考虑同步的事情。
    • 对象分离(标量替换)
      如果对象能够不需要作为一个连续的内存结构被访问,并且不需要被外部访问,那么它可以不存储在内存中,可以存储在寄存器上。

标签:总结,JAVA,代码,知识,编译器,编译,JIT,编译成,运行
来源: https://www.cnblogs.com/reclusiveone/p/16065512.html