‘壹’ 通过 GraalVM 将 Java 程序编译成本地机器码!
2018年4月,Oracle Labs发布了一项革新技术——Graal VM,这是基于HotSpot虚拟机的增强版本,旨在成为"任何语言"的全栈运行平台。尽管网络上对该技术的资料相对有限,主要依赖官方文档来理解。本文将简要概述Graal VM的概念和关键特性。
首先,Graal VM被官方称为"Universal VM",它能无缝支持多种编程语言,包括但不限于:Java、JavaScript、Python和R,甚至能混合使用它们的接口和对象。重要的是,它支持使用已有的本地库文件,极大地提高了跨语言协作的效率。
其中最显着的优点是AHEAD-OF-TIME COMPILEMENT,即Substrate VM技术。0.20版本的Graal VM引入了Substrate VM,它是一个极简的运行时环境,拥有独立的异常处理和内存管理等功能。通过Substrate VM的本地镜像构造器(Native Image Generator),用户可以构建出针对特定机器的可执行文件,从而极大提升程序启动速度,内存需求也显着降低。
然而,Graal VM的使用并非没有挑战。Java在微服务场景下,由于其设计初衷是"一次编写,到处运行",这在追求快速启动和低内存占用的微服务环境中显得不那么适用。Graal VM通过提前编译来改善这些问题,官方数据显示,使用GraalVM后的启动时间能提升50倍,内存需求降低50%。
尽管如此,Graal VM在改变Java的一些固有特性上面临困难。它的工作原理是将源代码或中间代码转换成Graal VM能理解的中间表示(IR),并通过Truffle工具集构建语言解释器,如Sulong,支持C和C++等语言。
要安装Graal VM,比如在macOS上,首先要下载适用于OpenJDK 11的GraalVM社区版,然后添加至PATH和JAVA_HOME环境变量。此外,还可根据需要安装额外的语言支持,如Python和R。通过一个Spring Boot应用的示例,我们可以看到如何利用GraalVM的Native Image功能,将Java程序编译为本地可执行文件,从而实现显着的性能提升。
总的来说,Graal VM为Java程序带来了革命性的变化,尤其在微服务和性能优化方面,但同时也需要开发者理解和适应其特有的限制。对于编程爱好者和开发者来说,这是一个值得探索和学习的新领域。