graalvm
1.简介
在过去的几年中,我们目睹了JVM生态系统中创新的惊人步伐和规模。 不仅每6个月就会发布新的JDK版本,而且研究和开发工作正在加速发展,而没有任何缺乏方向和功能的迹象。
本教程的思想
源于
对其中一项开发的好奇和困惑,即
GraalVM
项目,该项目从有前途的实验
过渡
到了尖端技术。 如果您也对此主题感兴趣,请加入我的旅程,我们将学习
GraalVM
是什么以及对普通开发者意味着什么。
2.什么是GraalVM?
官方文档中
包含该问题的确切答案,但是当您仔细研究时,您可能会发现解释有些含糊,并提出了许多问题。
GraalVM
是一种高性能的运行时,可显着提高应用程序的性能和效率,非常适合微服务。 它设计用于以Java,JavaScript,基于LLVM的语言(例如C和C ++)以及其他动态语言编写的应用程序。 它消除了编程语言之间的隔离,并实现了共享运行时的互操作性。
我们了解的第一件事是
GraalVM
是一个运行时,但是什么样的运行时? 在性能和效率方面,它如何优于其他所有运行时? 最后但并非最不重要的一点是,它如何消除编程语言及其运行时之间的差异? 让我们尝试找到这些问题的答案,并希望能使
GraalVM变得
神秘。
对于每种受支持的编程语言,
GraalVM都会
模拟其默认运行时的行为,并且所有语言运行时的可执行文件都与
GraalVM
发行版捆绑在一起(我们将在
稍后
介绍)。 但是
GraalVM
仿真的运行时如何比默认的本地语言运行时表现更好?
GraalVM
的心脏和灵魂是
GraalVM编译器
–一种动态的实时(JIT)编译器,旨在使用广泛的代码分析和高级优化技术来提高应用程序的效率和性能特征。 尽管
GraalVM编译器
是用Java编写的,但它使用中间表示(IR)来执行与语言无关的优化并生成机器代码。 当作为共享运行时运行时,这种独特的功能
会将GraalVM
扩展为真正的多语言平台。
最重要的是,
GraalVM
带有对
JVM runtime
的特殊特权处理。 首先,
GraalVM编译器
使用JVM编译器接口(
JVMCI
)与
Java HotSpot VM
集成,作为
JEP 243的
一部分提供。 但是
GraalVM
进一步走了一步,将其优化的编译器整合到
本地映像中
,这是一种先进的
提前
(
AOT
)编译技术,可将Java(和其他JVM语言)代码转换为本地平台可执行文件。
尽管听起来令人兴奋,但让我们停下来思考一分钟。 我们知道
GraalVM编译器
是用Java编写的,因此,当与
Java HotSpot VM
集成时,它必须首先通过JIT,然后才能做任何有用的事,对吗? 确实,以前曾经是这种情况,但要感谢
libgraal
,它是由
本机映像
生成的共享库,其中包含
GraalVM编译器
的预编译版本!
3.进化还是革命?
GraalVM
是否是一种
出色
的软件工程产品,它将改变我们用来运行应用程序的方式? 还是作为“银弹”流行语进行销售的另一种营销尝试?
就我个人而言,我可能不像我们大多数人那样擅长预测未来。 尽管如此,很明显
GraalVM
是进化思想和革命思想的结合。 例如,使用相同的高度优化的共享运行时,不同编程语言之间的无缝互操作性会带来大量不可预见的机会。
但是,至少在短期内,真正的赢家可能是Java和JVM平台。
HotSpot VM
带有自己的高度优化的字节码
C2编译器
,该
编译器
使用C ++编写。 不幸的是,在许多资料中已经提到,多年来,它变得异常复杂且难以维护,而且更加完善。
GraalVM编译器
可以看作是
HotSpot VM的
下一代编译器,有可能在将来成为完整的
C2编译器
替代品。 可能看起来不像是一场革命,但肯定是需要如此的演变。
但是,
提前
(
AOT
)编译和
本机映像
是一个完全不同的故事。 它将JVM带到了
云原生
和
无服务器计算
的边缘,这在以前是无法想象的。 这绝对是JVM生态系统的突破。
4.获取GraalVM
GraalVM
曾经是一个
研究项目,
但就在一年多以前,它已经作为可用于生产的技术而向世界展示。
“……我们相信
GraalVM
终于成熟并可以投入生产了。 ……”
https://medium.com/graalvm/announcing-graalvm-19-4590cf354df8
GraalVM
发行版有两个版本:
Community
和
Enterprise
。 社区版本基于
OpenJDK
版本,而企业版本基于
Oracle JDK
,需要付费订阅。 在这两种情况下,都可以使用Java 8和Java 11发行版。
在本教程中,我们将仅使用社区版。 到目前为止,
20.3.0
是最新的
GraalVM
社区版本,该版本基于
OpenJDK
版本
1.8.272
和
OpenJDK
版本
11.0.9
(取决于您需要的捆绑软件)。 可以从项目的
官方Github页面
下载所有主要
受支持
平台的
GraalVM
社区发行
版
。
5.下一步是什么
在本教程的下一部分中,我们将讨论
GraalVM
在JVM应用程序上下文中带来的所有优点。
graalvm