JVM编译

作者: 自天佑之吉无不利 | 来源:发表于2023-09-11 06:53 被阅读0次

为了支持云原生和容器化环境,JVM 在执行 Java 程序时也在逐步从 JIT 编译转向 AOT 编译。这种转变可以通过 GraalVM 等工具来实现。

在传统的 JIT 编译中,Java 程序在运行时会将字节码逐行编译成机器代码。这种动态编译能够针对运行时的状态和调用频率进行优化,但也导致了性能延迟和启动速度较慢的问题。

为了解决这些问题并适应云原生环境,JVM 引入了 AOT 编译。AOT 编译是在程序运行之前将字节码直接编译成本地机器代码。这种方式可以提高程序的运行速度和启动速度,并减少运行时动态编译的开销。

为了从 JIT 过渡到 AOT,JVM 将字节码与 AOT 编译相结合。在 JIT 编译运行时,JVM 会监视代码的执行情况并收集相关的运行时信息,然后将这些信息传递给 AOT 编译器。AOT 编译器会利用这些信息对字节码进行优化,并生成可执行的本地机器代码。这样,当相同的代码再次执行时,就可以直接使用 AOT 编译得到的机器代码,而无需再次启动 JIT 编译。

这种 JIT 和 AOT 结合的方式可以在保持性能优化和动态适应性的同时,拥有更快的启动时间和更高的执行速度。这样 Java 程序就能更好地适应云原生和容器化的环境了,性能和可扩展性也更好。

Ahead-of-Time(AOT)编译并没有完全替代Just-in-Time(JIT)编译,而是和JIT编译结合在一起来使用。AOT编译和JIT编译各有优缺点。例如,AOT编译的优点在于它可以在应用程序运行前进行,从而减少了应用程序启动时的延迟。另一方面,它的缺点是,由于它不能利用到运行时的信息,例如运行时的类型信息和热点代码信息等,因此它往往无法达到JIT编译那样的优化程度。因此,目前的JVM实现往往结合使用AOT编译和JIT编译,以便同时利用二者的优点。一般的做法是,在应用程序启动时,先使用AOT编译生成的代码,然后在运行过程中,通过JIT编译对热点代码进行更深度的优化。这种做法既可以减少应用程序的启动延迟,又可以保证应用程序运行时的高效性能。

此文章为9月Day9学习笔记,内容来源于极客时间《云时代 》,强烈推荐该课程

相关文章

  • synchronzied偏向锁的批量重偏向与撤销

    JVM在编译synchronzied时,会编译成monitorenter monitorexit指令,是一种JVM...

  • 机器码示例

    JVM语言无关性的基础是编译器--不同语言,通过不同的编译器,都编译为字节码。JVM平台无关性的基础是JVM--相...

  • Java 虚拟机内存模型—线程私有

    JVM 内存模型 .java 源文件 -> javac 工具编译 -> .class 文件 -> JVM 解析 -...

  • JVM了解

    java程序运行流程草图 说明:.java编译成面向jvm的class文件,供jvm解释执行 JVM结构 JVM的...

  • JVM

    java编译器只需面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译器,编译成字节码程序,通过J...

  • Java常见面试题汇总-----------JVM专题(JVM编

    32、JVM编译器优化 32.1、JVM编译的过程   1、解析与填充符号表过程  1)、词法、语法分析  词法分...

  • 深入理解JVM之编译优化

    JDK在源码编译阶段将源码编译为JVM字节码,JVM字节码是一种平台无关的中间代码方式,要由JVM在运行期间对其进...

  • jvm 相关阅读

    相关阅读 JVM性能优化1-JVM简介 JVM性能优化2-编译器 JVM性能优化3-垃圾回收 JVM性能优化4-C...

  • 大佬浅谈JVM

    引出面试问题1、什么是JVM(java virtual Machine )?JVM 是 JAVA class 编译...

  • jvm专题二

    jvm架构理解image.png jvm执行流程Java编译成字节码、动态编译和解释为机器码的过程分析:image...

网友评论

      本文标题:JVM编译

      本文链接:https://www.haomeiwen.com/subject/zycsvdtx.html