哈喽,大家好,我是指北君

今天给大家推荐的是 Oracle Labs 开源的跨语言全栈虚拟机—— GraalVM 。

对不需要长时间运行的、小型化的应用来说, Java 天生就带有一些劣势,特别在应用技术架构从大型单体架构向小型微服务架构发展,再进一步向云原生技术架构发展的潮流下, Java 表现出来很多不适应。

体现在单个微服务随时可以中断和更新的场景中, Java 启动时间相对较长、需要预热才能达到最高性能的特点,这种不适应尤为明显。

而在无服务架构中,上面的不适应更加突出。相比服务,一个函数的规模通常小,执行时间短。

为适应新的技术趋势和需求, GraalVM 应运而生。

GraalVM 简介

GraalVM 是一个高性能 JDK 发行版,旨在加速用 Java 和其他 JVM 语言编写的应用程序的执行,同时支持 JavaScript、Ruby、Python 和许多其他流行语言。GraalVM 的多语言功能可以在单个应用程序中混合多种编程语言,同时消除外部调用成本。

GraalVM 架构

虚拟化 原生 原生架构的虚拟机_虚拟化 原生


GraalVM 为 HotSpot Java 虚拟机添加了一个用 Java 编写的高级即时 (JIT) 优化编译器。

除了运行 Java 和基于 JVM 的语言之外,GraalVM 的语言实现框架 (Truffle)使得在 JVM 上运行 JavaScript、Ruby、Python 和许多其他流行语言成为可能。借助 GraalVM Truffle,Java 和其他支持的语言可以直接互操作,并在同一内存空间中来回传递数据。

运行时模式

GraalVM 作为一个运行时环境是独一无二的,它提供了多种操作模式:JVM 运行时模式、Native Image、Truffle 上的 Java(相同的 Java 应用程序可以在任何一种上运行)。

GraalVM 快速开始

GraalVM 安装

以 Linxu 系统安装为例:

  1. 导航到GitHub 上的 GraalVM Releases 存储库。为 Linux AMD64 架构选择基于 Java 11 或基于 Java 17 的发行版,然后下载。
  2. 将目录更改为要安装 GraalVM 的位置,然后将.tar.gz存档移至该位置。
    解压存档:
tar -xzf graalvm-ce-java<version>-linux-amd64-<version>.tar.gz
  1. 机器上可以安装多个 JDK。下一步是配置运行时环境:
    将PATH环境变量指向 GraalVM Enterprisebin目录:
    export PATH=/path/to//bin:$PATH
    设置JAVA_HOME环境变量解析到安装目录:
    export JAVA_HOME=/path/to/
  2. 检查安装是否成功,运行java -version命令。
    或者,可以将 GraalVM 指定为 Java IDE 中的默认 JRE 或 JDK 安装。

GraalVM 使用

GraalVM 的核心分布包括 JVM、GraalVM 编译器、LLVM 运行时和 JavaScript 运行时。下载并安装 GraalVM 后,可以运行基于 Java、JavaScript 和 LLVM 的应用程序了。

GraalVM 的 /bin 目录类似于标准 JDK 的目录,但包含一组额外的启动器和实用程序:

  • js:一个 JavaScript 启动器
  • lli:一个 LLVM 位码启动器
  • gu: GraalVM Updater 工具,用来安装其他语言运行时和实用程序

检查默认提供的运行时版本:

java -version
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment GraalVM CE 22.0.0 (build 17.0.2+5-jvmci-22.0-b02)
OpenJDK 64-Bit Server VM GraalVM CE 22.0.0 (build 17.0.2+5-jvmci-22.0-b02, mixed mode, sharing)

js -version
GraalVM JavaScript (GraalVM CE Native 22.0.0)

lli --version
LLVM 12.0.1 (GraalVM CE Native 22.0.0)
运行 Java

启动器java使用 GraalVM 默认编译器 - GraalVM 编译器运行 JVM。看看这个典型的 HelloWorld 类:

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello, World!");
  }
}

运行以下命令将此类编译为字节码,然后执行它:

javac HelloWorld.java
java HelloWorld
Hello World!
运行 JavaScript 和 Node.js

GraalVM 可以执行纯 JavaScript 代码,无论是在 REPL 模式下还是通过直接执行脚本文件:

$JAVA_HOME/bin/js
> 1 + 2
3

GraalVM 还支持运行 Node.js 应用程序。默认情况下不安装 Node.js 支持,但可以使用 GraalVM Updater 轻松添加:

gu install nodejs
$JAVA_HOME/bin/node -v
v14.18.1

超过 100,000 个 npm 包经过定期测试并与 GraalVM 兼容,包括 express、react、async、request、browserify、grunt、mocha 和 underscore 等模块。要安装 Node.js 模块,请使用与 Node 一起安装的 /bin 文件夹中的 npm 可执行文件来安装。该npm命令等效于默认的 Node.js 命令并支持所有 Node.js API。

安装模块colors,ansispan和express使用npm install. 安装模块后,您可以从应用程序中使用它们。

$JAVA_HOME/bin/npm install colors ansispan express

使用以下代码片段并将其保存为app.js安装 Node.js 模块的同一目录中的文件:

const http = require("http");
const span = require("ansispan");
require("colors");

http.createServer(function (request, response) {
    response.writeHead(200, {"Content-Type": "text/html"});
    response.end(span("Hello Graal.js!".green));
}).listen(8000, function() { console.log("Graal.js server running at http://127.0.0.1:8000/".red); });

setTimeout(function() { console.log("DONE!"); process.exit(); }, 2000);

使用以下命令在 GraalVM Enterprise 上运行app.js :node

$JAVA_HOME/bin/node app.js
运行 Python

使用 GraalVM,可以在 Python 3 运行时环境中运行 Python 应用程序。默认情况下不提供该支持,但可以使用GraalVM Updater工具快速将其添加到 GraalVM:

gu install python

它安装graalpython启动器。检查版本,你已经可以运行 Python 程序了:

$JAVA_HOME/bin/graalpython --version
$JAVA_HOME/bin/graalpython
...
>>> 1 + 2
3
>>> exit()

指北君有话说

GraalVM - 一种高性能 JDK 发行版。它旨在加速用 Java 和其他 JVM 语言编写的应用程序的执行,同时还为 JavaScript、Ruby、Python 和许多其他流行语言提供运行时。GraalVM 的多语言功能可以在单个应用程序中混合多种编程语言,同时消除任何外语调用成本。

广大开发者可以使用 GraalVM 运行基本应用程序以及添加对随附功能的支持的信息。同时,GraalVM 有丰富的社区和文档支持,方便了解 GraalVM 的多语言功能,并了解如何构建基于 JVM 的应用程序的平台特定本机可执行文件。

开源指北,立志做最好的开源分享平台,分享有趣实用的开源项目。

以上就是本次推荐的全部内容,我是指北君,感谢各位的观看。

虚拟化 原生 原生架构的虚拟机_虚拟化 原生_02