Graalvm最全详解(定义特点及原理应用)

Graalvm最全详解(定义特点及原理应用)-mikechen

什么是Graalvm

Graalvm最全详解(定义特点及原理应用)-mikechen

GraalVM是 Oracle 开源的一款通用虚拟机产品,官方称之为 Universal GraalVM,是新一代的通用多语言高性能虚拟机。

 

为什么要使用Graalvm

GraalVM 与传统的虚拟机不同,它不仅支持 Java 语言,还支持其他编程语言,如 JavaScript、Python、Ruby 和 R 等。

GraalVM 使用一种称为“本机图像”的技术,将应用程序编译成本机可执行文件,以提高性能和降低内存使用量。

总之,GraalVM 提供了一个全面的解决方案,使开发人员能够在单个虚拟机中构建和运行多种语言应用程序,从而提高应用程序的性能和效率。

 

Graalvm的特征

Graalvm的特点,主要体现在如下方面:

1.高性能

Graalvm主要体现在启动高,省内存。

 

2.云原生

想达到的效果是部署java项目时,不用先安装jdk,直接在目标机器运行。

 

3.通晓多语言

除了运行基于Java和JVM的语言之外,GraalVM的语言实现框架(Truffle)还可以在JVM上运行JavaScript,Ruby,Python和许多其他流行语言。

使用GraalVM Truffle,Java和其他支持的语言可以直接相互操作,并在同一内存空间中来回传递数据;

 

Graalvm工作原理

先回顾一下HotSpot工作原理

Graalvm最全详解(定义特点及原理应用)-mikechen

启动慢的原因就在于,加载和编译比较慢,class越多,加载编译就越慢,启动就慢。

对于启动速度要求比较高的生产环境就不是很友好,比如云原生中的容器。试想,docker容器已经秒起了,但是里面跑一个jar非常慢,这你受得了吗?

所以GraalVM就出现了,提升运行效率。

GraalVM的工作原理可以分为以下几个部分:

1.即时编译器(JIT)

GraalVM包含一个即时编译器(JIT),JIT编译器可以根据程序的执行情况动态生成最优化的本机代码,从而提高程序的性能。

如下图所示:

Graalvm最全详解(定义特点及原理应用)-mikechen

2.AOT编译器

除了JIT编译器,GraalVM还包含一种AOT编译器,将运行时的编译提前到了编译时,大大减少启动时间。

如下图所示:

Graalvm最全详解(定义特点及原理应用)-mikechen

3.多语言的运行环境

可以为多语言提供统一的运行环境,让各个语言相互调用超级简单。

如下图所示:

Graalvm最全详解(定义特点及原理应用)-mikechen

GraalVM可以解释多种编程语言,包括:Java、JavaScript、Python、Ruby等。

当一个程序在GraalVM上运行时,解释器会解释程序代码,并将其转换为中间表示形式(IR)。

 

4.Truffle框架

Truffle 是一个用 Java 写就的语言实现框架,用于帮助开发人员构建高性能的语言解释器。

基于 Truffle 的语言实现仅需用 Java 实现词法分析、语法分析以及针对语法分析所生成的抽象语法树(Abstract Syntax Tree,AST)的解释执行器,便可以享用由 Truffle 提供的各项运行时优化。

Graalvm最全详解(定义特点及原理应用)-mikechen

 

5.本机图像生成器

GraalVM还提供了本机图像生成器,可以将应用程序和所有依赖项编译成单个本机可执行文件,这可以简化应用程序的部署和分发。

 

GraalVM的应用场景

GraalVM的应用场景非常广泛,包括但不限于以下几个方面:

1.改善Java应用程序的性能

GraalVM可以作为JVM的替代品,提供更好的性能和更低的内存消耗。在运行Java应用程序时,GraalVM可以使用即时编译(JIT)技术来提高性能。

2.支持多语言开发

GraalVM支持多种编程语言,如Java、JavaScript、Python、Ruby、R等,这使得开发人员可以在同一个运行环境中使用多种语言来构建应用程序。

3.构建高性能语言解释器

GraalVM提供了Truffle框架,可以帮助开发人员构建高性能的语言解释器。使用Truffle,开发人员可以轻松地开发自己的语言,并在GraalVM上运行。

4.减少云环境中的资源使用

GraalVM可以将应用程序编译成本机图像,这可以减少应用程序的启动时间并降低内存占用。这对于在云环境中运行的应用程序来说非常重要,因为它们需要快速启动并使用最少的资源。

总之,GraalVM的应用场景非常广泛,无论是在开发新应用程序还是改进现有应用程序方面,都可以为开发人员提供更好的性能和更高的生产力。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法