Java 開發社群正在熱議一個新的實驗性 Gradle 外掛,該外掛聲稱透過用原生二進位制方法替代傳統的 javac
來顯著加快編譯時間。Elide Gradle Plugin 利用 GraalVM 的原生映象技術來消除通常在標準構建過程中拖慢 Java 編譯的 JIT 預熱延遲。
原生二進位制消除 JIT 預熱瓶頸
Elide 效能提升背後的核心創新在於其 Java 編譯方法。該外掛不使用 Gradle 的預設 Tooling API(在 Gradle 守護程序的 JVM 中執行 javac
並遭受 JIT 預熱延遲),而是使用編譯器的原生二進位制版本。這意味著編譯立即以全速開始,無需等待 Java 虛擬機器透過即時編譯來最佳化程式碼。
該外掛的工作原理是配置 Gradle 的 JavaCompile
任務來分叉程序,並使用呼叫 elide javac
而不是標準 javac
的自定義可執行檔案。由於 Elide 構建為 GraalVM 原生映象,它跳過了通常拖慢中小型編譯作業的整個 JIT 預熱階段。
技術要求
- Elide 必須單獨安裝
- 需要在
JAVA_HOME/bin/elide-javac
中手動建立javac
墊片 - 需要
elide.pkl
清單檔案來進行依賴管理 - 透過
--source/--target/--release
標誌與 JDK 8+ 相容
對較小專案的顯著效能改進
社群討論顯示,對於少於 10,000 個類的專案,效能優勢最為明顯。在這些場景中,該外掛可以提供比標準 javac
快達 20 倍的編譯速度。這使其對典型的企業應用程式和較小的程式碼庫特別有價值,在這些專案中,JIT 預熱開銷佔總構建時間的很大一部分。
效能優勢源於許多 Java 專案從未達到 JIT 最佳化變得有益的閾值這一事實。Gradle 對增量編譯和構建快取的關注雖然在其他方面有幫助,但實際上不利於達到使傳統 javac
具有競爭力的熱 JIT 狀態。
效能宣告
- 編譯速度比原生 javac 快達20倍
- 對於少於10,000個類的專案最為有效
- 原生二進位制檔案消除了 JIT 預熱延遲
- 針對依賴解析優化了 HTTP 處理
依賴解析獲得原生速度提升
除了編譯之外,Elide 還透過在原生二進位制中嵌入 Maven 的解析器來加速 Maven 依賴解析。該外掛可以完全替換 Gradle 的依賴獲取機制,將 JAR 檔案下載到 Gradle 可以直接使用的本地 Maven 相容儲存庫結構中。
「Gradle 似乎仍然侷限於 HTTP/1.1 和糟糕的連線池,所以擊敗它並不難。」
這種方法透過原生執行和最佳化的 HTTP 處理提供與 Maven 相同的解析語義,同時提供更快的效能。
外掛配置選項
enableInstall
:使用 Elide 的 Maven 解析器(預設:當存在 elide.pkl 時為 true)enableJavaCompiler
:使用 Elide 進行 Java 編譯(預設:true)enableProjectIntegration
:啟用 Elide 專案感知功能(預設:可配置)manifest
:專案清單檔案路徑(預設:elide.pkl)
安裝需要手動設定步驟
目前,使用該外掛需要在 JAVA_HOME
目錄中建立一個手動墊片,將 javac
呼叫重定向到 elide javac
。使用者還必須在使用外掛之前單獨安裝 Elide。開發團隊承認這種設定複雜性,並計劃在未來版本中消除 JAVA_HOME
墊片要求。
當使用增強的依賴解析功能時,該外掛還需要一個 elide.pkl
清單檔案進行依賴管理,儘管隨著專案的成熟,這一限制預計會改變。
Elide Gradle Plugin 代表瞭解決 Java 冷啟動編譯效能問題的一種有趣方法。雖然仍處於實驗階段並需要一些手動設定,但它為處理典型 Java 專案規模的開發人員提供了令人信服的效能改進。隨著工具的成熟和設定變得更簡單,對於希望在不改變基本開發工作流程的情況下加速構建過程的團隊來說,它可能成為一個有吸引力的選擇。