不容错过的云原生时代虚拟机王者
哈喽,大家好,我是指北君
。
今天给大家推荐的是 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 系统安装为例:
- 导航到GitHub 上的 GraalVM Releases 存储库。为 Linux AMD64 架构选择基于 Java 11 或基于 Java 17 的发行版,然后下载。
- 将目录更改为要安装 GraalVM 的位置,然后将.tar.gz存档移至该位置。
解压存档:
tar -xzf graalvm-ce-java<version>-linux-amd64-<version>.tar.gz
- 机器上可以安装多个 JDK。下一步是配置运行时环境:
将PATH环境变量指向 GraalVM Enterprisebin目录:
export PATH=/path/to//bin:$PATH
设置JAVA_HOME环境变量解析到安装目录:
export JAVA_HOME=/path/to/ - 检查安装是否成功,运行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 一起安装的
安装模块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 的应用程序的平台特定本机可执行文件。
开源指北,立志做最好的开源分享平台,分享有趣实用的开源项目。
欢迎加入交流群,你可以摸鱼、划水、吐槽、咨询。
还有简历模板、各种技术面试资料等100G的资源等着你领取哦。
公众号回复 888
马上加入,快来一起来聊一聊吧!
以上就是本次推荐的全部内容,我是指北君
,感谢各位的观看。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?