<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          OpenJDK 提出 Project Galahad 合并 GraalVM 原生編譯

          共 2202字,需瀏覽 5分鐘

           ·

          2022-12-22 09:06

          OpenJDK 項(xiàng)目提出了一個新項(xiàng)目——代號為 Galahad——將 GraalVM 社區(qū)版代碼庫的某些部分合并到 OpenJDK 中。

          這是一項(xiàng)長期努力的最新進(jìn)展,旨在提供在程序執(zhí)行前將 Java 應(yīng)用程序編譯為機(jī)器代碼的能力。從表面上看,這似乎有些奇怪——畢竟,新的 Java 開發(fā)人員學(xué)習(xí)的第一件事就是“Java 不編譯為機(jī)器代碼,而是編譯為 JVM 字節(jié)碼”。

          這個簡單的格言具有深遠(yuǎn)的影響,其中最基本的是 Java 平臺依賴于強(qiáng)大的動態(tài)運(yùn)行時 - JVM - 來執(zhí)行。此運(yùn)行時支持動態(tài)運(yùn)行時技術(shù),例如類加載和反射,這些技術(shù)在提前 (AOT) 編譯語言中實(shí)際上沒有類似物。事實(shí)上,這是 Java 眾多強(qiáng)大功能的起點(diǎn),也是它在大約 25 年前進(jìn)入軟件領(lǐng)域時如此具有開創(chuàng)性的原因。

          盡管如此,人們一直對 Java 程序可以直接編譯為機(jī)器代碼并在沒有 JVM 的情況下獨(dú)立執(zhí)行的可能性感興趣。這種愿望有幾個不同的原因——無論是為了減少 Java 應(yīng)用程序達(dá)到峰值性能的預(yù)熱時間,還是為了減少 Java 應(yīng)用程序的內(nèi)存需求,或者甚至只是為了避免將資源用于應(yīng)用程序的運(yùn)行時子系統(tǒng)可能不需要。

          已經(jīng)有幾個項(xiàng)目試圖實(shí)現(xiàn)這種可能性。最近的,也可以說是迄今為止最成功的,是 GraalVM 項(xiàng)目。這個項(xiàng)目不是來自 OpenJDK,而是來自 Oracle 實(shí)驗(yàn)室的一個研究項(xiàng)目。第一個生產(chǎn)級版本 GraalVM 19.0 于 2019 年 5 月發(fā)布。

          從那時起,它作為一個獨(dú)立的項(xiàng)目運(yùn)行,具有不同的發(fā)布周期并且與 OpenJDK 的交互有限。與 GraalVM 相關(guān)的少數(shù)幾個 Java 增強(qiáng)建議 (JEP) 中有兩個是:

          JEP 243:Java 級 JVM 編譯器接口

          JEP 295:提前編譯

          這兩個 JEP 都出現(xiàn)在 Java 9 中,并且它們一起將 Graal 編譯器引入了 OpenJDK 代碼庫。

          Graal 編譯器是 GraalVM 的主要組件之一——它是一個對 Java 字節(jié)碼進(jìn)行操作并生成機(jī)器代碼的編譯器。它可以在 JIT 或 AOT 模式下運(yùn)行。
          在前者中,它可以用來代替 C2(有時稱為“服務(wù)器編譯器”)。重要的是要注意 Graal 本身是用 Java 編寫的——不像其他 JVM 可用的 JIT 編譯器是用 C++ 編寫的。

          Graal 在 Java 10 中作為基于 Java 的實(shí)驗(yàn)性 JIT 編譯器提供,作為JEP 317。但是,在 Java 17(2021 年 9 月發(fā)布)中,AOT 和 JIT 編譯器的實(shí)驗(yàn)形式都被移除了。盡管如此,仍保留了實(shí)驗(yàn)性 Java 級 JVM 編譯器接口 (JVMCI)——因此仍然可以使用外部構(gòu)建版本的 Graal 編譯器進(jìn)行 JIT 編譯。

          如果按預(yù)期交付,最新公告將標(biāo)志著 Graal 回歸 OpenJDK 代碼庫。然而,也許更重要的是 GraalVM 流程和項(xiàng)目的變化。Galahad 將作為 OpenJDK 子項(xiàng)目運(yùn)行,并維護(hù)一個單獨(dú)的 repo,該 repo 會定期在主線 repo 上進(jìn)行 rebase。當(dāng)功能準(zhǔn)備就緒時,它們將被遷移到主線倉庫。這與長期運(yùn)行的項(xiàng)目(如 Loom 和 Lambda)成功使用的模型相同。

          Galahad 將 JDK 20 作為初始基準(zhǔn)。這本質(zhì)上是一個代碼和技術(shù)起點(diǎn),因?yàn)?/span>JDK 20 已經(jīng)進(jìn)入 Rampdown——因此至少在 JDK 21(預(yù)計 2023 年 9 月)之前,不可能將任何重新引入的 Graal 代碼作為 Java 的一部分進(jìn)行交付。目前,Galahad 將專注于貢獻(xiàn)最新版本的 GraalVM JIT 編譯器并將其集成為 C2 的替代方案。后續(xù)會加入一些必要的AOT編譯技術(shù),讓Graal JIT編譯器在JVM啟動時立即可用。

          這是必要的,因?yàn)?Graal 是用 Java 編寫的,它可能會遇到與此大致相似的慢啟動問題:

          Hotspot 從 C1 編譯器和可用的 Graal 開始Graal 在 Java 解釋器線程上執(zhí)行,最初速度很慢,直到它自行編譯將 Graal 編譯器預(yù)編譯為本機(jī)代碼將是解決此問題的一種可能性 -一個舊的 Draft JEP指出了這一點(diǎn),但目前尚不清楚它是否會恢復(fù)或開始新的工作。

          應(yīng)該注意的是,并不是所有的 GraalVM 代碼庫都會被提交——只有核心 JIT 和 AOT 組件,以及 Native Image 工具。GraalVM Enterprise Edititon 中的 Oracle 專有特性預(yù)計不會捐贈給該項(xiàng)目。

          Galahad 從一份令人印象深刻的提交者名單開始——不僅來自 Oracle 的 OpenJDK 和 GraalVM 團(tuán)隊,還包括來自更廣泛的 OpenJDK 社區(qū)的許多貢獻(xiàn)者,包括來自 Red Hat 的 Andrew Dinn 和 Dan Heidinga 以及來自 AWS 的 Roman Kennke。Galahad 和 Leyden 項(xiàng)目(另一個關(guān)注 AOT 編譯和相關(guān)技術(shù)的 OpenJDK 項(xiàng)目)之間的確切關(guān)系尚未明朗,但 Galahad 的幾個列出的貢獻(xiàn)者也一直活躍在 Leyden。

          盡管該項(xiàng)目仍處于早期階段,但許多有影響力的社區(qū)成員對 Galahad 表示歡迎,因?yàn)樗砹嗽趯で笫?Java 保持在云原生技術(shù)堆棧最前沿的過程中又向前邁出了重要一步。



          瀏覽 145
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜芽尤物在线 | 三级在线视频 | 影音先锋男人网 | 日无码视频 | 污网站亚洲第一 |