Azul推出了一个新的云原生编译器——Java Cloud Compiler,它将Java JIT编译从本地系统卸载到弹性资源,降低运行应用程序所需的资源量,并缩短达到峰值性能的时间。

了解JIT和AOT

Java运行时是一个完全自力更生的系统,旨在在单个系统上运行和改进代码。运行时通过即时(JIT)编译工作,使用将Java字节码(JAR和类文件)转换为本机代码的本地资源,以提高速度和内存。Azul副首席技术官Simon Ritter在一篇博客中解释了这个过程理解Java编译,详细说明代码如何随着时间的发展而改进。JIT编译对大多数用户来说是透明的,不需要开发人员或管理员的交互,但好奇的开发人员可以通过以下工具监控其角色JITWatch.通过将此JIT编译卸载到单独的系统,Azul的云编译器可以更快地执行JIT,在运行相同代码的系统之间共享优化,并将资源返回到应用程序,以提高吞吐量或减少所需的总CPU/RAM并降低成本。

红帽发布了一个博客,JIT编译器如何提高OpenJDK中的性能,其中涵盖了JIT如何在Java应用程序运行时改进它们。这篇文章讨论了Java应用程序如何启动、监控代码和执行优化以提高性能的部分内容。这些JIT优化在自力更生的JRE中完成,与正在运行的应用程序共享资源,并在应用程序运行时寻求在应用程序中进行改进,然后将执行切换到更快的JIT代码。

JIT的另一个替代方案是提前(AOT)编译,它寻求将Java应用程序直接编译为本机代码,而不是通过字节码。AOT的目的是通过提前工作来缩短达到峰值性能的时间,并提高内存消耗。一篇贝尔东的文章,深入探讨新的Java JIT编译器,描述了标准OpenJDK JIT编译器C1/C2与GraalVM AOT编译器的作用和区别。JIT和AOT本质上都不是更好的-虽然AOT通常可以更快地启动,但“提前”一词忽略了可以从观察代码运行的哪些部分中了解到的信息,以及AOT编译所需时间明显更长而不是字节码,并包含其他行为权衡。

云编译器

Azul智能云引入了第三个选项,它将JIT(峰值性能)的优势与AOT(快速启动时间)的优势连接起来。由于团队通常在许多系统中运行相同的代码,JRE与组织的共享JIT服务器通信,因此每个JRE不需要执行相同的观察和优化周期。然后,云编译器还可以使用与正在运行的应用程序隔离的CPU资源执行更深入的分析。结果应用程序可以在传输此信息并使用改进的代码运行所需的网络时间内达到峰值性能。在QCon描述的测试中,达到峰值性能的时间更快,吞吐量也更快25%到100%。

Azul的云编译器是可用在商业Azul Prime发行中。免费版本的Prime可用于开发、测试和评估。

参考引用

  • Cloud Native 分布式架构原理与实践(柳伟卫著,北京大学出版社出版)
  • https://developers.redhat.com/articles/2021/06/23/how-jit-compiler-boosts-java-performance-openjdk#hotspot_s_jit_execution_model