使用 jlink 的 Java 運行時間

Microsoft 承認並支援採用專為特定應用程式打造的自定義 Java 運行時間,而需要使用一般用途的 Java 運行時間。 這個 Java 部署方法可確保 Java 執行時間只包含應用程式真正需要的 Java 平臺部分,因此,針對雲端和伺服器型 Java 應用程式以及桌面/GUI 應用程式,提高安全性、減少部署大小,以及增強效能。

傳統上,Oracle/Sun Microsystems 會產生 Java 運行時間環境 (JRE) 安裝程式,其只包含 Java 虛擬機、Java API 和作業系統和瀏覽器特定整合,目的是讓計算機能夠執行從因特網下載的 Java 應用程式,或透過瀏覽器執行 Applets 和 Java Web Start 應用程式。

隨著新式 Web 應用程式和瀏覽器的出現,Applets 和 Java Web Start 技術都已過時,瀏覽器不再支援 Java 外掛程式。 預安裝在電腦上的一般用途 Java 運行時間環境的需求變得較不重要加班。 使用 Java 9 時,Applet API 會變成已被取代(請參閱 JEP 289),而使用 Java 17,API 會標示為移除,這表示它肯定會在未來的 Java 版本中移除。

另一個重大變化是 Java 的模組化,也是從 Java 9 版本開始的(請參閱 JSR 376)。 在這項變更過程中,開發人員現在可以使用 JDK jlink 中新增的命令行來產生專為符合應用程式需求而設計的自定義 Java 運行時間,以部署為內建內嵌運行時間,以及應用程式程式代碼通常會作為雲端式工作負載容器映像的一部分。 或作為 GUI 型應用程式的安裝程式的一部分。

今天,Minecraft:Java Edition 會部署至數百萬個 Minecraft 遊戲玩家,內嵌在遊戲中的自定義 Java 運行時間。 在 線上服務,例如LinkedIn、Yammer、Bing 和 Azure 之後,Microsoft 也會使用這項技術部署數十萬個 JVM。

建立自訂Java運行時間

若要建立 Java 執行時間,您必須在環境中安裝 JDK 9 或更新版本。 先下載安裝 OpenJDK 的 Microsoft Build。

使用識別必要的模組 jdeps

Java 平台現在已分割成模組。 如需完整清單,請參閱 Java 17 的檔;其他版本的 Java 可能包含新的模組。

JDK 工具 jdeps 可用來分析 .class 檔案、目錄或 JAR 檔案,以識別 Java 模組相依性、JDK 內部相依性,以及其他有助於開發人員產生 Java 運行時間的實用資訊。

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

$ jdeps HelloWorld.class
HelloWorld.class -> java.base
   <unnamed>                                          -> java.io                                            java.base
   <unnamed>                                          -> java.lang                                          java.base

此工具jdeps指出這個類別只相依於和 java.io 封裝中的java.lang類型,因此它只需要模組 java.base。 將針對 JAR 檔案產生類似的輸出做為輸入。 有了必要模組的清單,您現在可以建立 Java 執行時間。

若要從 JDK 建立 Java 執行時間,您必須知道您想要的模組。 使用 jdeps 來識別它們。 如需命令行工具的詳細資訊 jlink ,請參閱

範例:

$ jlink \
         --add-modules java.base \
         --strip-debug \
         --no-man-pages \
         --no-header-files \
         --compress=2 \
         --output /javaruntime

您現在可以使用 位於 /javaruntime 的 Java 執行時間來執行相 java.base 依於模組的應用程式程式碼。 所產生的資料夾結構javaruntime與 JDK 目錄結構類似,而java啟動 JVM 的命令行工具會像往常一樣位於 ./bin/jlink 資料夾中。 假設自定義 Java 執行時間包含現有應用程式的所有必要模組,則可以由 JAVA_HOME參考。

$ /javaruntime/bin/java HelloWorld
Hello, World!

在上述範例中,Windows 上產生的 Java 運行時間在 Windows 上耗用約 24 MB。

使用 Docker 容器映射建立 Java 運行時間

您可以使用 Docker 多階段組建 來建立、取用和封裝自定義 Java 運行時間,作為映像組建的一部分。 瞭解如何 使用 Docker 建立 Java 運行時間。

知識庫

javax.net.ssl.SSLHandshakeException:已收到嚴重警示:handshake_failure

如需如何修正此問題的說明,請流覽 Java安全性和密碼編譯

資源

提供 OpenJDK Microsoft Build 的意見反應

將您的意見、想法和想法傳送給我們,以協助我們改善 OpenJDK 的 Microsoft Build。 請流覽 GitHub 上的 OpenJDK 討論頁面,以傳送意見反應給我們。

Java 和 OpenJDK 是 Oracle 和/或其關係企業的商標或注冊商標。