1. 程式人生 > 其它 >不容錯過的雲原生時代虛擬機器王者

不容錯過的雲原生時代虛擬機器王者

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

今天給大家推薦的是 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 的應用程式的平臺特定本機可執行檔案。

開源指北,立志做最好的開源分享平臺,分享有趣實用的開源專案。

歡迎加入交流群,你可以摸魚、划水、吐槽、諮詢。
還有簡歷模板、各種技術面試資料等100G的資源等著你領取哦。
公眾號回覆 888馬上加入,快來一起來聊一聊吧!

以上就是本次推薦的全部內容,我是指北君,感謝各位的觀看。