GraalVM——让Java变得更强大

admin 2024年1月25日13:55:40评论17 views字数 1397阅读4分39秒阅读模式

GraalVM是Oracle推出的一款较新且性能更先进的JDK,官方标语是“Build faster, smaller, leaner applications”。GraalVM 是一个高性能 JDK,可提高基于 Java 和 JVM 的应用的性能并简化 Java 云原生服务的构建和运行,实现Java应用在云原生环境的下的热启动。

由于接下来会涉及到java语言的编译期和运行期的概念,在此先以图例赘述下java语言的执行流程。

GraalVM——让Java变得更强大

图1:java语言执行流程

需要指出的是常用的HotSpot虚拟机中内置了两个即时编译器,分别称为Client Compiler和Server Compiler,或者简称为C1编译器和C2编译器,他们属于运行期编译器(英文为 Just In Time Compiler,简称为 JIT )。

具体来说,它具有以下优势:

1

高级优化即时编译器(JIT)

GraalVM 的高性能优化编译器无需更改任何代码即可提升应用性能高达 55%,使用应用运行速度更快,扩展性能更好,CPU 和内存需求更低。GraalVM使用的是Java语言编写的JIT编译器,与HotSpot使用的C++编写的C2编译器相比,在余热完毕的情况下,Graal编译器与C2的编译器能力几乎不分伯仲。

2

Native Image 预编译

GraalVM在Ahead-of-Time(AOT)的模式下可以将 Java 和基于 Java 字节码的应用编译为原生二进制可执行文件,无需 Java 虚拟机即可直接运行。下图是两种模式的流程:

GraalVM——让Java变得更强大

图2:AOT&JIT模式

GraalVM 支持所有主要微服务框架,包括 Helidon、Micronaut、Quarkus、Dubbo 。在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。云原生时代,Java相比Go、Rust等编程语言最大的弊端就是启动慢,尤其是微服务较多的情况下,这与根据实时计算条件弹性扩缩容的云原生技术相冲突。Spring6借助AOT技术来降低运行时的内存占用并提升了应用的启动速度,这给Java在云原生时代性能的提升带来了新福音。

3

多语言支持

GraalVM——让Java变得更强大

图3:Graal支持的语言

Graalvm是虚拟机,可以运行多种不同语言编写的程序,比如Java、Scala、groory,同时它还可以通过另一个关键组件truffle来支持Ruby、R、JS、nodeJs、C++、C等编程语言。想象下,多种语言放在同一个文件内实现是多么便捷。

凡事有利有弊,GraalVM的提前编译(AOT)则破坏了Java“Write once, run anywhere(一次编写,到处运行)”的特点,需要为不同的硬件、不同的操作系统去编译出相应的版本,也显著降低了Java链接过程的动态性,必须要求加载的代码在编译期就是全部已知的,而不能再是运行期才确定,因此在使用Java Native Interface(JNI)、Java Reflection(反射)、Dynamic Proxy(动态代理)、序列化、JVMTI等Java特性时则需要另外的处理。

本文初步介绍了GraalVM的技术特点,后续的文章会结合实际操作,详细的介绍GraalVM如何具体使用。

GraalVM——让Java变得更强大

文章作者:李晓笛&任爱华

封面设计:Lina           

GraalVM——让Java变得更强大

原文始发于微信公众号(EBCloud):GraalVM——让Java变得更强大

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月25日13:55:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   GraalVM——让Java变得更强大https://cn-sec.com/archives/2426618.html

发表评论

匿名网友 填写信息