使用 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組建。
使用識別必要的模組 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 執行時間。
使用建立 Java 運行時間 jlink
若要從 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組建的意見反應
將您的意見、想法和想法傳送給我們,以協助我們改善 OpenJDK 的Microsoft組建。 請流覽 GitHub 上的 OpenJDK 討論頁面,以傳送意見反應給我們。
Java 和 OpenJDK 是 Oracle 和/或其關係企業的商標或注冊商標。