4年前 (2021-03-27)  相关技术 |   抢沙发  592 
文章评分 0 次,平均分 0.0

下一代虚拟机-GraalVM
GraalVM是一个高性能运行时,它在应用程序性能和效率方面提供了显著的改进,这是微服务的理想选择。它是为java、JavaScript、LLVM等语言编写的,如C++和C++语言,以及其他动态语言。它消除了编程语言之间的隔离,并在共享运行时启用互操作性。它可以独立运行,也可以在OpenJDK的上下文中运行,Node.js或者Oracle数据库。
下一代虚拟机-GraalVM

对于Java程序

对于现有的Java应用程序,GraalVM可以通过更快地运行它们、通过脚本语言提供扩展性或创建提前编译的本地映像来提供好处。

更快地运行Java

GraalVM可以在OpenJDK的上下文中运行,从而使用一种新的即时编译技术使Java应用程序运行更快。GraalVM负责将Java字节码编译为机器代码。特别是对于其他基于JVM的语言(如Scala),这种配置可以实现好处,例如Twitter在生产中运行GraalVM所经历的好处。

GraalVM编译器由于能够在许多场景中删除昂贵的对象分配,为高度抽象的程序提供了性能优势。更好的内联和更积极的投机优化可以为复杂的长期运行应用程序带来额外的好处。

GraalVM在性能方面是否和有多大的差异当然取决于具体的工作量。我们有兴趣收到任何能帮助我们使GraalVM更快的基准测试结果。

使应用程序可扩展

GraalVM支持在Java应用程序上下文中运行JavaScript、R、Python、Ruby、LLVM IR和Web程序集。它提供了向那些具有细粒度主机访问过滤器的语言公开Java数据结构的能力。集成是语言无关的,即JavaScript的集成在稍后也可以用于执行任何其他基于GraalVM的语言。代理机制允许从Java数据结构中模拟动态对象,并将它们公开到嵌入脚本中。看看如何使用GraalVM使基于JVM的应用程序可扩展的描述。

创建本机镜像

在JavaVM中运行应用程序需要启动和占用成本。GraalVM有一个特性,可以为现有基于JVM的应用程序创建本机镜像。镜像生成过程使用静态分析来查找从主Java方法访问的任何代码,然后执行完全提前编译(AOT)。生成的本机二进制文件以机器代码形式包含整个程序,以便立即执行。它可以与其他本地程序链接,还可以选择包括GraalVM编译器,以支持互补的即时编译(JIT)编译支持,以运行任何基于GraalVM的高性能语言。为了获得更多性能,可以使用在应用程序的前一次运行中收集的概要文件引导优化来构建本机映像。请参见此处如何构建本机映像的示例。

为了Node.js程序

GraalVM可以在Node.js中用GraalVM替换V8来执行JavaScript。这样做的主要好处是启用PolyPlot应用程序(例如,使用Java、R或Python库),运行Node.js使用大堆配置和java垃圾收集器,或者使用GRAALVM的互操作性来定义C/C++中的数据结构,并使用它们从JavaScript中使用。

从Java、R或Python重用库

GraalVM允许直接使用现有的Java库或Java框架(如Spark或Flink)Node.js. 此外,您还可以使用R或Python来进行数据科学或直接从JavaScript应用程序打印。在这里找到一个多个应用程序的示例。

运行大堆栈

标准中包含的V8 JavaScript引擎Node.js分发版是针对浏览器配置进行调优的,并设计为在小型堆场景中有效工作。我们启用运行Node.js通过JVM的堆管理,打开了大型堆配置和适当的垃圾收集设置的能力。最大可配置堆大小为32GB,带有压缩的32位指针,64位指针配置支持TB的堆。

在C/C++中定义数据结构

GRAALVM允许本地代码(例如,C/C++)和JavaScript的有效组合。可以直接访问本地数据结构,编译器可以跨任何边界内联。在这样一种场景中,当应用程序的其他部分写入时,在C中管理和分配高效数据结构时,这将是有益的Node.js。

对于Ruby、R、Python或WebAssembly

Ruby、R、Python、WebAssembly是GraalVM生态系统中的实验性产品,目前不建议用于生产,但我们正在积极研究这些语言的所有模块的稳定性和支持。此时,我们可以运行Ruby、R和Python等更简单的应用程序,但我们没有为Java提供的完全兼容性,并且节点.js应用。WebAssembly目前实现WebAssembly MVP(最低可行产品)规范,是GraalVM环境中最年轻的语言。

除了标准的GraalVM好处(例如,使用这些应用程序中的Java或JavaScript)外,GraalVM还可以为这些语言实现10x或更高的加速。我们很乐意帮助使现有的Ruby和R应用程序与GraalVM一起工作,但我们还不能保证这些语言的现成兼容性。

在Oracle数据库中运行

GraalVM是为可嵌入性而设计的,可以在数据库中执行。我们的Oracle数据库多语言引擎(MLE)原型可在这里提供。它允许Oracle数据库用户使用browserify运行JavaScriptNode.js模块,并用Python编写扩展。

用于Microservices框架

GraalVM原生映像作为早期采用者技术提供,它与许多不同的Java微服务框架一起工作。已有几个项目已经接受了这项技术作为其应用平台:夸克、微米AUT、Helidon。对于这些框架,GraalVM原生映像与在热点上运行相比,显著降低了运行时内存需求。我们相信GraalVM原生映像技术可以成为部署云本地应用程序的最佳方式。
下一代虚拟机-GraalVM
下一代虚拟机-GraalVM
我们鼓励开发GraalVM嵌入,类似于我们自己在Oracle数据库、OpenJDK或Node.js. 与研究合作伙伴一起,我们已经探讨了嵌入Spark或Flink的想法。在这里可以找到关于如何在现有的基于JVM的应用程序或本机应用程序中嵌入GraalVM的描述。

实现你自己的语言

Truffle语言实现框架(Truffle)允许在GraalVM上高效地运行编程语言。它通过自动从解释器中导出高性能代码来简化语言实现。你可以在这篇研究论文中找到这种方法的细节。

使用GraalVM实现您自己的语言不仅可以提高性能。更重要的是,它允许您的语言与GraalVM生态系统提供的丰富工具相连接。此外,它使您的语言能够在任何GraalVM嵌入的上下文中运行。

我们开发了一种名为“SimpleLanguage”的演示语言来展示块菌的特性。了解如何开始实现一种语言。

创建与语言无关的工具

GraalVM提供了一个框架,用于创建与语言无关的工具,如调试器、分析器或其他工具。GraalVM提供了一种标准化的方式来表达和运行程序代码,支持跨语言研究和工具开发,这些工具开发一次就可以应用于任何语言。

官网地址:https://www.graalvm.org/

 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/1764.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册