GraalVM增加了本地图像和编译器的增强功能

587 阅读3分钟

甲骨文公司对GraalVM多语言运行时的最新更新提供了编译器和本地图像可用性的改进,以及针对特定语言的改进。

GraalVM 21.2于7月20日发布,在项目网站的社区版和企业版中均可获得。对于编译器来说,这次更新的特点是优化,包括改进了对计数循环的循环限制分析,使编译器能够分析循环之前的控制流,以推理感应变量。这可以使更多的未计算的循环适合于高级优化。使用典型的StringBuilder 模式的代码的编译也得到了改进,在基于JDK 11的GraalVM构建中,由于认识到JDK 11中的紧凑字符串,对这些模式的支持得到了增强。

[也在InfoWorld上:JDK 16:Java 17的新特性]

在社区版中,增加了一个投机性的卫兵移动优化,它试图将一个循环不变的卫兵从循环内移到循环外以改善相关的工作负载。long 计的循环中的安全点消除机制也得到了改进。

一个实验性的写下沉优化试图将写操作移出循环。在企业版中有一个新的针对顺序代码的SIMD矢量化,但还没有默认启用。

GraalVM试图为Java、JavaScript、基于LLVM的语言(如C和C++)以及动态语言(如Python和Ruby)提供一个高性能的运行时。对于GraalVM中的Native Image功能,Gradle和Maven插件于6月发布,支持JUnit 5测试,以简化构建应用程序的Native Image,并允许JUnit测试在Native Image模式下运行,以检查代码在那里如何工作。

原生图像现在可以自动从图像中删除不必要的安全提供者;可触及的安全提供者由静态分析检测。通过GraalVM 21.2,类预定义的实现支持在运行时调用Classloader.loadClass 。需要在运行时加载的预期类必须在构建时提供给静态分析,以便将其纳入 "现实世界 "的分析中,但除此之外,包括在运行时的任意时刻加载类的代码模式现在在本地图像中工作,正如预期的那样。另外,在GraalVM 21.2中,用-H:+AllowVMInspection 构建的本地镜像现在支持用Java编写的JFR(Java Flight Recorder)事件。

GraalVM 21:2的其他新功能和改进。

  • 与GraalVM一起工作的Truffle语言实现框架有一个新的编译队列启发式方法,以改善许多工作负载上多语言运行时的预热时间。这在默认情况下是启用的。
  • Truffle上的Java的HotSpot插件API允许代码在开发过程中自然发展,而不必重新启动运行中的应用程序。
  • JavaScript的实现增加了最近的提议,如新的集合方法和实验性的运算符重载
  • 对于Ruby,GraalVM 21.2增加了兼容性和性能改进,包括Ruby方法和常量的精确无效化,使用每一个名称和每一个类别的假设。
  • 对于Python,一个更快的_pickle ,以加快序列化速度。
  • 通过跨语言互操作性支持C++虚拟调用。
  • WebAssembly的兼容性也得到了改善。