近日,Oracle Java 平臺組首席架構師 Mark Reinhold 在社交媒體發文正式宣佈啟動 “Leyden”專案。據悉,該專案已獲得批准,將通過在 Java 平臺上引入“靜態映像”來緩解啟動和效能緩慢的問題,旨在加速 Java 業務的建立。
據瞭解,“Leyden”專案計劃最早於 2020 年 5 月份左右提出,至今已經被討論了 2 年多。
當時,Mark Reinhold 在一份 Java 郵件列表中發表了一篇關於他提議和領導的工作的帖子,他表示“這項工作被稱為“Leyden”專案,將通過在 Java 平臺和 Java 開發工具包(JDK)中引入“靜態映像”的概念來解決這些痛點。
Leyden 專案引入“靜態映像”
“Leyden”專案裡引入的所謂的“靜態映像”,是一款獨立於應用程式的程式,它派生自一個執行該應用程式的應用程式,而非其他應用程式。
靜態映像相對於它可以載入的類來說是一個“封閉的世界”:在執行時,不能從映像外部載入類,也不能動態建立類。封閉世界的約束嚴格限制了 Java 的自然動態性,特別是在執行時反射和載入類的功能方面,許多現有的 Java 框架和庫都依賴這些功能。
以上兩個約束不僅可以減少影像的大小及其啟動時間,同時這些約束還“允許進行積極的提前編譯(Ahead-of-time compilation),從而縮短影像達到峰值效能的時間,提前編譯是將高階程式語言(如 C 或 C++)編譯成本機機器程式碼,以便生成的二進位制檔案可以本機執行的行為。
Leyden 專案將加速 Java 的優化工作
據介紹,Leyden 是一個基於過去專案基礎上新建立的專案,包括 GNU 編譯器 for Java 和 GraalVM 的本機映像功能。GraalVM 是一種高效能執行時,針對各種語言(如 Java 和 JVM 語言、JavaScript、Ruby、Python 等)進行了效能優化,並針對多語言或多語言應用程式實現了互操作性。
由於 Leyden 專案的靈感來自 GraalVM,這兩個專案有著共同的組成部分,它們可能會(也可能不會)進入主流 Java 規範。然而,由於目前缺乏進一步的資訊,一些觀察家認為這兩個專案是交織在一起的。
早在 2020 年 Leyden 專案剛提出的時候,Longmeado Omdia 分析師 Bradley Shimmin 就評價稱:“Leyden 專案似乎應該成為 GraalVM 專案的一部分,我相信作者希望這樣做,因為它實現了 GraalVM 支援的相同目標,除了這裡,他們提議建立一個針對單個應用程式的極其精簡的執行時環境。”。
(Valhalla 專案是 Oracle 正在進行的一項工作,它引入了值型別,這是一種允許 Java 程式在執行時更高效地管理資料的機制。Oracle 表示,當 Valhalla 專案最終併入 JDK 時,整個效能格局將發生變化。)
此外,其他大型 Java 社群的成員也對該 Leyden 專案表示感興趣且期待。早前,Red Hat 的產品管理高階總監 Rich Sharples 就提到,該專案“旨在從 OpenJDK 本身的 Graal/SubstrateVM 中提供我們所需的大部分內容”。
深入改進 Java 平臺:正式開啟第一步
當然,不是所有應用程式都能很好地適應“Leyden”專案“靜態映像”的這這兩個約束,也不是所有的開發人員都願意接受這個約束。
但總而言之,Mark Reinhold 從一開始就沒有采用封閉世界的約束,而是通過探索一系列約束,提出了一種漸進的方法,由此產生的優化可能比封閉世界的約束弱,但優化應該適用於更廣泛的現有程式碼。
此次,Mark Reinhold 於 5 月 20 日在 OpenJDK 的一篇文章中正式宣佈了 “Leyden” 專案的啟動 —— “現在是採取第一步並開始該專案的時候了”,也是意在通過 “Leyden” 專案加速 Java 業務的建立。
Mark Reinhold 表示,“將沿著上述約束範圍逐步工作,從小而簡單的開始,以便能夠深入瞭解 Java 平臺規範所需的更改”。“在此過程中,也將努力保持 Java 的可讀性、相容性和通用性的核心價值”。
Mark Reinhold 還補充稱,從長遠來看, Leyden 專案開發人員可能會採用完全封閉世界的限制來生成完全靜態的映像。同時,該專案還將在很大程度上支援現有的 JDK 元件,如 JVM 熱點、C2 編譯器、共享類和應用程式資料以及 JLink 程式碼工具。