日韩av无码中文字幕,国产午夜亚洲精品国产成人小说,成人影院午夜男女爽爽爽,欧美 亚洲 中文 国产 综合

首頁 熱點(diǎn) 要聞 國內(nèi) 產(chǎn)業(yè) 財(cái)經(jīng) 滾動(dòng) 理財(cái) 股票

【譯】Oracle GraalVM 發(fā)布,啟動(dòng)快了46.42% 聚焦

2023-06-22 09:53:26 來源 : 程序員客棧

一、Oracle GraalVM

Oracle GraalVM 是一個(gè)新 GraalVM ?的發(fā)行版,它適用于JDK 17和JDK 20,并在GraalVM 免費(fèi)條款和條件(GFTC)許可證下發(fā)布(請(qǐng)參見FAQ)。這意味著你可以免費(fèi)使用所有最優(yōu)秀的GraalVM功能,無論是在開發(fā)中還是生產(chǎn)環(huán)境!

對(duì)于Native Image,在這個(gè)版本中引入了以下特性:

Profile-guided 優(yōu)化 和更多編譯器優(yōu)化,以獲得最佳的峰值性能G1 GC用于運(yùn)行具有大堆和最小暫停時(shí)間的應(yīng)用程序壓縮對(duì)象頭和指針,以獲得更低的內(nèi)存占用機(jī)器學(xué)習(xí)自動(dòng)推斷分型信息支持SBOM的附加安全功能

GraalVM Native Image 已經(jīng)因其即時(shí)啟動(dòng)而聞名,但是隨著這個(gè)版本的發(fā)布,我們可以展示它也是一種非常高效的方式來運(yùn)行長(zhǎng)時(shí)間運(yùn)行的Java應(yīng)用程序,且性能高。我們已經(jīng)在使用GraalVM Native Image編譯的一個(gè)Java 20 Spring PetClinic 示例應(yīng)用程序上進(jìn)行了測(cè)試,并與JIT編譯進(jìn)行了比較,以下是性能結(jié)果:使用 Oracle GraalVM Native Image、GraalVM CE Native Image 和帶有 C2 JIT 的 GraalVM CE 的 Spring Petclinic 性能?;鶞?zhǔn)測(cè)試實(shí)驗(yàn)在 Oracle X5-2 服務(wù)器(Intel Xeon E5-2699 v3)上運(yùn)行了最新的 Spring Petclinic,將工作負(fù)載限制在16個(gè)CPU,并設(shè)置了最大堆大小為1GB。使用wrk測(cè)量最大吞吐量,以循環(huán)方式擊中五個(gè)不同的端點(diǎn)(創(chuàng)建寵物、所有者和診所訪問并讀取所有者和寵物ID),每秒600個(gè)請(qǐng)求,在100秒內(nèi)進(jìn)行。峰值吞吐量是以下180秒的平均性能。延遲數(shù)字是在吞吐量實(shí)驗(yàn)完成后捕獲的,使用 wrk2應(yīng) 用每秒5000個(gè)請(qǐng)求的恒定負(fù)載。


(資料圖片僅供參考)

現(xiàn)在讓我們更仔細(xì)地看一下這些性能指標(biāo)。Native Image 以啟動(dòng)速度快而聞名。由于使用 Oracle GraalVM 的額外編譯器優(yōu)化,啟動(dòng)將提升到一個(gè)新的級(jí)別:

相對(duì)于GraalVM CE Native Image,Oracle GraalVM Native Image的啟動(dòng)速度**快46.42%**。啟動(dòng)速度比在JIT上運(yùn)行(GraalVM CE with C2 JIT)快32倍。

由于使用了額外的內(nèi)存優(yōu)化,使用 Oracle GraalVM Native Image 構(gòu)建的應(yīng)用程序使用內(nèi)存顯著減少:

相對(duì)于GraalVM CE Native Image,少25%的內(nèi)存。相對(duì)于GraalVM CE with C2 JIT,少2.52倍的內(nèi)存!

在這里,Oracle GraalVM Native Image 的峰值吞吐量比 GraalVM CE 高 1.6 倍。對(duì)于這個(gè)特定的應(yīng)用程序,吞吐量仍略低于 JIT。當(dāng)在 Spring、Quarkus 和 Micronaut 等其他基準(zhǔn)測(cè)試中運(yùn)行時(shí),在許多情況下,我們看到 AOT 在峰值吞吐量方面甚至領(lǐng)先于JIT。另一個(gè)評(píng)估您的應(yīng)用程序重要的指標(biāo)是效率:在給定的時(shí)間和資源量下可以獲得多少性能。這在云端尤為重要,因?yàn)槟枰Ц顿Y源的費(fèi)用以及使用它們的時(shí)間長(zhǎng)度,但即使在本地環(huán)境中,您也希望高效地利用基礎(chǔ)設(shè)施。為了評(píng)估這一點(diǎn),讓我們看一下我們的應(yīng)用程序可以每秒處理多少個(gè)請(qǐng)求,每GB內(nèi)存(參見上圖):

Oracle GraalVM Native Image 可以每秒處理 14780 個(gè)請(qǐng)求/GB/s,是CE Native Image 和 C2 JIT 的兩倍。

這意味著使用 Oracle GraalVM Native Image,您可以獲得適合您基礎(chǔ)設(shè)施的最佳峰值吞吐量,或在資源受限的環(huán)境中實(shí)現(xiàn)良好的性能?,F(xiàn)在讓我們來看一下延遲分布。延遲是反映應(yīng)用程序所有請(qǐng)求響應(yīng)能力的關(guān)鍵指標(biāo)。最慢的請(qǐng)求在尾延遲分布中可見,并且極大地影響著服務(wù)質(zhì)量。通常,業(yè)務(wù)需求規(guī)定大多數(shù)請(qǐng)求的特定延遲限制(通常是99%,即P99延遲)。在這里,我們可以看到在95個(gè)百分位之前,Oracle GraalVM Native Image 和 CE JIT with C2 有著非常相似的響應(yīng)時(shí)間,均低于3毫秒。這意味著您可以期望使用本地鏡像與JIT相同的應(yīng)用程序響應(yīng)性。然而,在最高百分位數(shù)上,JIT 的響應(yīng)時(shí)間明顯下降,而 Native Image 的響應(yīng)時(shí)間保持較低。因此,對(duì)于這個(gè)應(yīng)用程序來說,Native Image 提供了明顯更好的 P99 延遲時(shí)間,因此提高了服務(wù)的響應(yīng)性。綜上所述,Oracle GraalVM Native Image 為長(zhǎng)時(shí)間運(yùn)行的應(yīng)用程序提供了出色的性能特征,同時(shí)具有快速啟動(dòng)和低資源使用的優(yōu)點(diǎn)。我們還在此版本中推出了許多新功能。由于更新涵蓋范圍廣泛,我們發(fā)布了兩篇博客文章:本篇博客側(cè)重于 GraalVM JDK 和 Native Image,另一篇?jiǎng)t涵蓋了 GraalVM 語言和 Truffle 的更新。現(xiàn)在,讓我們看看此版本中還有什么新內(nèi)容!

二、基于 JDK 17 和 JDK 20 構(gòu)建的 GraalVM

GraalVM 現(xiàn)在有一個(gè)與 JDK 版本命名相匹配的新命名方案 - 例如,這個(gè)版本包括兩個(gè) GraalVM 版本:GraalVM for JDK 17 和 GraalVM for JDK 20。這兩個(gè)版本都基于主分支,并包含新功能,因此您可以選擇最適合您的JDK版本。然而,我們建議您轉(zhuǎn)移到JDK 20 - 正如我們之前宣布的那樣,我們正在過渡到一個(gè)新的發(fā)布計(jì)劃,在這個(gè)計(jì)劃中,我們將只為最新的 Java 版本發(fā)布 GraalVM(就像 Oracle JDK 一樣)。這樣,您也可以同時(shí)使用所有最新的 Java 和 GraalVM 功能。本次發(fā)布的另一個(gè)重大更新是 GraalVM JDK 下載現(xiàn)在包括 Native Image!不需要將 Native Image 作為單獨(dú)的組件下載或運(yùn)行 gu install native-image,它一開始就已經(jīng)準(zhǔn)備好了。下載 Oracle GraalVM 也變得更加容易,我們現(xiàn)在有穩(wěn)定的可腳本化下載 URL,因此您可以直接使用它們進(jìn)行下載,或者在您的腳本和Docker文件中使用。例如,要在Linux x86-64上獲取適用于JDK 20的Oracle GraalVM,請(qǐng)運(yùn)行以下命令:

wget?https://download.oracle.com/graalvm/20/latest/graalvm-jdk-20_linux-x64_bin.tar.gz

三、基于機(jī)器學(xué)習(xí)的編譯優(yōu)化

Oracle GraalVM 中可用的一個(gè)非常有用的功能是基于配置文件的優(yōu)化(PGO)。PGO 使您能夠在運(yùn)行時(shí)收集應(yīng)用程序的性能分析信息,然后與 Native Image 一起使用,以優(yōu)化生成的本地可執(zhí)行文件的性能。它使您能夠?qū)?AOT 優(yōu)化的優(yōu)點(diǎn)與運(yùn)行時(shí)性能分析相結(jié)合使用。此版本中一個(gè)令人興奮的新功能是基于機(jī)器學(xué)習(xí)的自動(dòng)分析。Native Image 現(xiàn)在使用預(yù)訓(xùn)練的 ML 模型來預(yù)測(cè)控制流圖分支的概率。然后,我們使用預(yù)測(cè)的概率進(jìn)行 PGO。在諸如 Renaissance、Da Capo 和 Da Capo con Scala 等全面基準(zhǔn)測(cè)試中,由預(yù)測(cè)配置文件推動(dòng)的 PGO 相比于默認(rèn)的 Native Image 配置可提供約 6% 的運(yùn)行時(shí)加速?;?ML 的配置文件分析在 Oracle GraalVM 中可用,并默認(rèn)啟用,我們期待您的反饋和性能報(bào)告。但是,請(qǐng)記住,ML 配置文件推斷可能會(huì)略微增加本地可執(zhí)行文件的大小,約1-2%。

四、更高性能的 Native Image

編譯器提供更好性能的一種方式是利用部署平臺(tái)的體系結(jié)構(gòu)特定功能。使用這些特定功能可以提供更好的性能,但在部署到?jīng)]有這些特定指令的機(jī)器上時(shí)可能會(huì)出現(xiàn)兼容性挑戰(zhàn)。我們引入了一個(gè)新的 **-march**選項(xiàng),類似于gcc,它可以讓您在平臺(tái)特定性能和兼容性之間進(jìn)行選擇:-march=compatibility提供最佳兼容性,或者 -march=native提供最佳性能,如果本地可執(zhí)行文件部署在相同的機(jī)器架構(gòu)或具有相同CPU特性的機(jī)器上。要列出所有可用的機(jī)器架構(gòu),請(qǐng)使用 -march=list。我們還對(duì)基于配置文件的優(yōu)化進(jìn)行了幾個(gè)更改:

為了為應(yīng)用程序提供最佳的峰值性能,PGO需要完整的剖析信息。這意味著您可能需要多次運(yùn)行您的應(yīng)用程序,并使用不同的工作負(fù)載來確保所有的用例都被剖析?,F(xiàn)在,通過native-image-configure可以合并多次PGO運(yùn)行收集的剖析文件。基于配置文件的優(yōu)化現(xiàn)在有一個(gè)新的采樣分析器,可以收集調(diào)用堆棧。此數(shù)據(jù)隨后包含在一個(gè).iprof文件中。當(dāng)構(gòu)建有PGO儀器的可執(zhí)行文件時(shí),默認(rèn)情況下啟用采樣分析器(但必要時(shí)可禁用)。請(qǐng)記住,為了獲得良好的配置文件,從而獲得良好的峰值性能,您需要運(yùn)行相關(guān)的工作負(fù)載并正確地預(yù)熱應(yīng)用程序。我們還實(shí)現(xiàn)了一個(gè)上下文感知內(nèi)聯(lián)器優(yōu)化,它使用新的采樣分析器將優(yōu)化工作更好地投入到熱代碼中。結(jié)果是2-7%更小的可執(zhí)行文件大小和增加的峰值性能。我們改進(jìn)了Native Image的循環(huán)向量化支持,允許編譯器向量化更多的循環(huán)以實(shí)現(xiàn)更快的執(zhí)行,并將某些代碼塊在 AOT 上的表現(xiàn)與 JIT 相媲美。五、Native Image Bundles

表面上看,Native Image 構(gòu)建命令(native-image -jar MyApp.jar)可能看起來很簡(jiǎn)單,但它啟動(dòng)了一個(gè)復(fù)雜的構(gòu)建過程,有許多變量和屬性依賴于環(huán)境。如果能夠復(fù)制構(gòu)建過程,例如用于更新和修復(fù)應(yīng)用程序,或者重現(xiàn)問題,將非常有幫助。為此,這個(gè)版本引入了 Native Image Bundles。現(xiàn)在,您可以生成一個(gè)構(gòu)建捆綁包,其中包含應(yīng)用程序的 JAR 文件以及有關(guān)參數(shù)、環(huán)境變量、系統(tǒng)屬性設(shè)置、類路徑和模塊路徑選項(xiàng)的信息。要生成捆綁包,請(qǐng)?jiān)跇?gòu)建本地可執(zhí)行文件時(shí)使用 — bundle-create=.nib 標(biāo)志。這將像之前一樣生成實(shí)際的可執(zhí)行文件,以及一個(gè) .nib文件和 .output目錄。有了這些文件,您可以通過運(yùn)行以下命令來復(fù)制構(gòu)建過程:native-image -bundle-apply=…/path/to/.nib捆綁包應(yīng)該簡(jiǎn)化更新 Native Image 部署,并有助于調(diào)試和重現(xiàn)問題。請(qǐng)嘗試使用這個(gè)功能,并讓我們知道您的想法!

六、Build 構(gòu)建報(bào)告

Native Image 現(xiàn)在可以生成構(gòu)建報(bào)告,幫助您更好地了解可執(zhí)行文件的內(nèi)容。構(gòu)建報(bào)告以 HTML 格式展現(xiàn),并提供以下信息:

構(gòu)建環(huán)境和使用資源的信息包括可達(dá)類型、字段和方法在內(nèi)的分析結(jié)果代碼和堆區(qū)域的完整分解軟件材料清單(SBOM)

構(gòu)建報(bào)告摘要和代碼區(qū)域分解使用 -H:+BuildReport 開啟這個(gè)實(shí)驗(yàn)性功能。

七、Linux 下的 AWT

我們已經(jīng)在 Native Image 中改進(jìn)了 AWT 支持:除了 Windows 之外,它現(xiàn)在還可以在 Linux 上工作!這意味著更多的 GUI Java 應(yīng)用程序現(xiàn)在可以在 Native Image 上運(yùn)行。我們期待著看到您的應(yīng)用程序使用 Native Image 運(yùn)行并收到您的反饋。改進(jìn)的 AWT 對(duì)于 macOS 的支持也正在路上。一個(gè)使用 GraalVM 構(gòu)建的 Linux 原生可執(zhí)行 AWT 應(yīng)用

八、Native Image 開發(fā)經(jīng)驗(yàn)

隨著每次發(fā)布,我們都會(huì)引入更新,使開發(fā)GraalVM,特別是 Native Image 的開發(fā)人員體驗(yàn)更加順暢。本次發(fā)布中有幾個(gè)更改:

改進(jìn)了 Native Image 構(gòu)建過程的內(nèi)存占用?,F(xiàn)在,構(gòu)建器考慮可用內(nèi)存,以減少在同一臺(tái)機(jī)器上運(yùn)行許多其他進(jìn)程時(shí)的內(nèi)存壓力。它在許多情況下消耗更少的內(nèi)存,因此也不太可能由于內(nèi)存不足而失敗。同時(shí),我們?cè)黾恿?Native Image 可以使用的最大內(nèi)存量,這將有助于構(gòu)建大型應(yīng)用程序。對(duì)于我們的 Windows 用戶來說,有一個(gè)好消息!Native Image 現(xiàn)在會(huì)自動(dòng)設(shè)置 Windows 的構(gòu)建環(huán)境 —— 您不再需要使用 x64 Native Tools 命令提示符。我們還改進(jìn)了 Windows 的調(diào)試:調(diào)試信息現(xiàn)在包括有關(guān) Java 類型的信息。我們繼續(xù)擴(kuò)展我們的JFR支持?,F(xiàn)在,還支持以下事件:ExecutionSample、ObjectAllocationInNewTLAB和JavaMonitorInflate。我們努力使元數(shù)據(jù)組合安全,以便添加新元數(shù)據(jù)將永遠(yuǎn)不會(huì)破壞構(gòu)建。內(nèi)部錯(cuò)誤變得更加用戶友好。在失敗的情況下,Native Image構(gòu)建將不再只顯示堆棧跟蹤,而是提供錯(cuò)誤報(bào)告和如何報(bào)告問題的說明?,F(xiàn)在可以通過 LLVM 后端在 RISC-V 上使用 GraalVM Native Image —— 在相關(guān)博客文章中閱讀更多信息。九、新的 Native Image 監(jiān)控功能 ?

受社區(qū)的強(qiáng)烈要求,我們實(shí)現(xiàn)了 JMX 遠(yuǎn)程管理功能。它可以通過 --enable-monitoring選項(xiàng)進(jìn)行啟用,例如:--enable-monitoring=jmxclient,jmxserver。請(qǐng)注意,此功能仍處于實(shí)驗(yàn)階段。

十、開始 Native Image ?

我們經(jīng)常會(huì)聽到這樣一個(gè)問題:“我怎樣才能知道是否可以使用 X 庫與 Native Image 一起使用”?,F(xiàn)在在 graalvm.org 上,您可以找到一份經(jīng)過測(cè)試并可與 Native Image 完美配合的庫和框架列表。目前,該列表包含了150多個(gè)經(jīng)過驗(yàn)證可以與 Native Image 一起使用的庫和框架,包括 Micronaut、Spring、Quarkus、Helidon、H2、GraphQL、MariaDB、Netty、MySQL、Neo4j、PostgreSQL、Testcontainers、Thymeleaf 等等。我們很高興看到我們的生態(tài)環(huán)境積極采用 Native Image,并通過GraalVM-reachability-metadata 倉庫提供支持。這個(gè)倉庫也與 Native Build Tools 集成在一起,因此現(xiàn)在可以自動(dòng)發(fā)現(xiàn)和拉取依賴項(xiàng)的 Native Image 配置文件。

十一、GraalVM JDK 和編譯器更新GraalVM JIT 現(xiàn)在已經(jīng)支持 ZGC!ZGC 是一個(gè)低延遲的垃圾收集器,面向需要低延遲或大堆大小的應(yīng)用程序。(目前,在 Native Image 中不支持 ZGC。)要啟用它,請(qǐng)使用命令行選項(xiàng) -XX:+UseZGC。我們預(yù)計(jì)這個(gè)更新對(duì)于大型應(yīng)用程序或低延遲至關(guān)重要的情況將有所裨益,并期待您的反饋和性能報(bào)告。我們還正在開源 Ideal Graph Visualizer(IGV)!? IGV 是一款開發(fā)人員工具,可讓您分析編譯圖并調(diào)查性能問題。我們希望 IGV 對(duì)于那些在 GraalVM 之上實(shí)現(xiàn)語言或調(diào)查高級(jí)編譯問題的人特別有幫助。十二、社區(qū)貢獻(xiàn)graalvm-reachability-metadata 倉庫共收到近200個(gè)社區(qū)貢獻(xiàn),使Java庫能夠在Native Image中使用。我們特別感謝 Spring 和 Micronaut 團(tuán)隊(duì)的大力支持。我們與 Red Hat 一起繼續(xù)構(gòu)建 JFR 支持、改進(jìn) Windows 上的調(diào)試,并添加了實(shí)驗(yàn)性的 JMX 支持。您提供的所有反饋、性能基準(zhǔn)和問題報(bào)告都有助于我們?cè)诿看伟l(fā)布時(shí)進(jìn)一步改進(jìn) GraalVM。十三、GraalVM 生態(tài)有什么新功能我們基于社區(qū)調(diào)查的回答,發(fā)布了一份GraalVM生態(tài)系統(tǒng)的大概述:最常用的功能和工具、庫和框架的采用情況、編程語言等等:GraalVM 社區(qū) 2022 調(diào)查報(bào)告【譯】。Spring Boot 發(fā)布了支持 Native Image 的主線版本 Spring Boot 3.0 !?Quarkus發(fā)布了帶有許多新功能的 Quarkus 3;我最喜歡的可能是新的改進(jìn)和可擴(kuò)展 Dev UI —— 試試吧!Micronaut 將很快發(fā)布4.0版本,使用 Java 17 作為基線,并提供更快的構(gòu)建方式 —— 您已經(jīng)可以嘗試 Milestone 2 了?,F(xiàn)在您可以使用 Azure App Insights 監(jiān)控 GraalVM 和 Spring Boot 應(yīng)用程序。Testcontainers 通過 GraalVM Reachability 倉庫與 Native Image 一起工作,還有幾個(gè)框架提供平穩(wěn)的集成 —— 例如看看 Micronaut 如何在Native Image 和 JVM 模式下測(cè)試 RabbitMQ 集成。Ionut Balosin 和 Florin Blanaru發(fā)布了一份獨(dú)立(非常詳細(xì))的 GraalVM 與 OpenJDK C2 性能研究。我們還看到了關(guān)于 Apache Kafka、Quarkus 和 GraalVM 的有趣實(shí)驗(yàn):?jiǎn)蝹€(gè)代理節(jié)點(diǎn)運(yùn)行需要約 130 毫秒,并且具有 60MB 的 RSS。
關(guān)鍵詞:
相關(guān)文章

最近更新
精彩推送
陳道明主演的十部電視?。ū硌菟囆g(shù)家陳道明最經(jīng)典的五部電視劇) 2023-06-22 09:47:22