<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>

          【譯】GraalVM 快速參考

          共 5137字,需瀏覽 11分鐘

           ·

          2021-01-19 08:52

          前言

          GraalVM 可幫助開發(fā)者更好的使用 Java,主要包括三個方面:

          1. 通過使用最先進(jìn)的 JIT 編譯器使其更快,
          2. 將它們編譯為即時啟動和低內(nèi)存消耗的二進(jìn)制可執(zhí)行文件,
          3. 使用支持的多語言或代碼進(jìn)行編程。

          這份快速參考是一頁的簡短摘要,介紹了 GraalVM 可以做什么,以及用來說明其功能的關(guān)鍵選項和命令。

          圖片

          GraalVM 快速參考(打印請使用高清的 pdf)

          你可以下載并打印到 A4 紙上,然后將它掛在辦公室,提醒 GraalVM 可以做些什么和有哪些配置選項。一定要使用pdf版本[1]打印(高清無碼)。請注意,如果你的打印機(jī)更適應(yīng)美國字母紙格式,請使用這個版本的 PDF[2]

          在這篇文章中,我們將快速瀏覽參考中的信息,并詳細(xì)地介紹它。

          一、運行 java 應(yīng)用

          第一部分側(cè)重于運行 Java 應(yīng)用程序。首先,請記住,GraalVM安裝包中包含 JDK,這意味著你可以使用 GraalVM 作為 JDK。例如,使用javac編譯 Java 源代碼:

          javac?MyApp.java

          當(dāng)然,你也可以使用 GraalVM 來運行 Java 應(yīng)用程序或任何其他 JVM 語言。除了能夠運行 Java 之外,還得益于 GraalVM 強(qiáng)大的即時(JIT)編譯器,并獲得了最先進(jìn)的峰值性能,通常比其他 jdk 運行得更快。

          java?-jar?MyApp.jar

          當(dāng)使用 GraalVM 運行 Java 應(yīng)用程序時,底層 JVM 使用的是 Java Hotspot VM,這意味著大多數(shù)配置選項是相同的,例如,你可以這樣指定應(yīng)用程序類路徑:

          java?-cp?target/myapp.jar?com.example.Main

          GraalVM 編譯器通常在預(yù)編譯為本機(jī)共享庫模式下運行[3],但是其代碼是用 Java 編寫的,并且可以用作 JAR 文件,從而導(dǎo)致性能略有不同:使用堆內(nèi)存進(jìn)行編譯會以較長的預(yù)熱為代價(例如,編譯器的 Java 代碼需要編譯)。以下選項可配置你要運行的模式(默認(rèn)情況下啟用):

          -XX:+-UseJVMCINativeLibrary

          除了將編譯器作為 JAR 或 native 庫運行之外,你還可以指定優(yōu)化配置[4]economy用來加快預(yù)熱速度,并選擇enterprise以獲得最佳的峰值性能(當(dāng)然需要 GraalVM 企業(yè)版)。

          -Dgraal.CompilerConfiguration=enterprise|community|economy

          JIT 編譯器可能會顯著加快應(yīng)用程序,但有時不清楚編譯器是否正常工作,代碼是否真正到達(dá)頂層,以及哪些方法到達(dá)編譯器,你可以開啟編譯日志:

          -Dgraal.PrintCompilation=true

          除了查看日志,你還可以啟用更多的調(diào)試輸出,例如,打印編譯器圖形來分析它們,以尋找更多的優(yōu)化空間:

          -Dgraal.Dump=:2

          當(dāng)然,JVM 的其他特性也適用于 GraalVM。例如,你可以添加一個 Java agent,該 agent 將對代碼進(jìn)行指令插入、在運行時生成類以及其它的 Java agent 功能。基于 Java 的 agent 和 native ?agent 都可以運行。一個典型的例子是用于簡化 ?native image 構(gòu)建的輔助配置 agent。

          -javaagent:path/to/jar.jar
          -agentlib:path/to/native/agent

          二、編譯成二進(jìn)制可執(zhí)行文件

          使用 GraalVM 的第二個主要優(yōu)點是它的Native Image[5]功能:提前將應(yīng)用程序編譯成二進(jìn)制文件。使用它你需要先安裝 native-image 組件。常用方法是為 GraalVM 發(fā)行版下載組件 JAR 文件,然后運行以下命令:

          gu?install?-L?native-image.jar

          然后,你可以使用安裝的native-image組件來生成應(yīng)用程序的二進(jìn)制文件:

          native-image?[options]?MyClass

          或者,你可以使用類似于 java 命令的 JAR 文件語法:

          native-image?-jar?MyApp.jar

          直接運行生成的二進(jìn)制文件:

          ./myApp

          如果你不想構(gòu)建可執(zhí)行文件[6],只是想構(gòu)建一個共享庫,那么可以使用--shared選項。你需要使用@CEntryPoint注解標(biāo)記公開的方法,但是關(guān)于這個主題的更詳細(xì)的探討超出了本文的范圍。

          --shared

          另一個非常有用的方法是 構(gòu)建靜態(tài)鏈接的二進(jìn)制文件[7] ,例如將 libc 這樣的操作系統(tǒng)庫鏈接到可執(zhí)行文件中。甚至可以選擇使用哪個 libc 實現(xiàn)。默認(rèn)情況下使用 glibc,muslc 是一個可選項,為此你需要配置一下構(gòu)建環(huán)境。

          --static?--libc=muslc

          三、多語言編程

          可以運行基于Truffle-based語言的基礎(chǔ)結(jié)構(gòu):JavaScript、Ruby、Python、R 等。這將包括該語言的解釋器、Truffle 框架[8]和 JIT 編譯器,因此可以在運行時編譯代碼以加快執(zhí)行速度。

          例如,其中每一項都包括對相應(yīng)語言的支持:

          --language:js
          --language:python
          --language:llvm
          --language:ruby

          另一個極有吸引力的功能是 native image 可執(zhí)行文件的配置文件引導(dǎo)優(yōu)化[9]。可以生成一個已檢測的二進(jìn)制文件,對其應(yīng)用相關(guān)的工作負(fù)荷,記錄與 JIT 相似的執(zhí)行代碼的概要文件,并使用這些概要文件來構(gòu)建生產(chǎn)二進(jìn)制文件。

          native-image?—?pgo-instrument?MyApp
          ./myApp
          native-image?—?pgo?profile.iprof?MyApp

          而且,如果你希望更清楚地了解本 native image 生成過程中發(fā)生的情況,例如,嘗試了解類初始化的類鏈,你可以使用一些有用的選項。

          以下選項可以開啟跟蹤某個類的初始化路徑:

          -H:+TraceClassInitialization=package.class.Name

          native image 構(gòu)建是一個 Java 進(jìn)程,因此你可以在代碼中打一個斷點,通過代碼調(diào)試器,全面的知曉更多細(xì)節(jié)。

          --debug-attach=[port]

          除此之外,還有許多其他有用的選項用來配置 native image 構(gòu)建和運行時的行為,我們將在未來探討這些配置項,你也可以通過使用幫助來了解一些可用的信息:

          --expert-options-all

          GraalVM 給你的第三個主要優(yōu)勢是一個多語言運行時[10],能夠運行多種語言,它包括由 GraalVM 的 JavaScript 引擎的 Node.js 平臺。因此,如果你有一個 node 應(yīng)用,可以通過調(diào)用 node 命令來運行。

          node?myApp.js

          除此之外,還有許多語言啟動器可用于支持程序的運行:

          js?myApp.js
          graalpython?myApp.py
          ruby?myApp.rb
          R?myApp.r
          lli?myApp

          默認(rèn)情況下,啟動器(包括 node)將在 native 模式下運行,其中解釋器編譯為 native image 二進(jìn)制文件。因此,若要使用Java類與JVM實現(xiàn)互操作性,請使用--jvm選項,對于其他語言,請使用--polyglot

          --polyglot?--jvm

          語言引擎具有許多功能來限制資源量[11],例如,語言上下文可以運行的時間(毫秒):

          --sandbox.MaxCPUTime=Nms

          四、通用開發(fā)工具

          最后也是相當(dāng)重要的一點就是,GraalVM 語言支持通用開發(fā)工具[12]開箱即用。這是整個 GraalVM 生態(tài)系統(tǒng)中最令人興奮的部分之一:實現(xiàn)一個語言解釋器來修復(fù)語言的語義,并獲得一個強(qiáng)大的虛擬機(jī)、一組 GC 算法、一個調(diào)試器、一個分析器、一個內(nèi)存分析器和其他免費工具

          指定以下選項以分別啟用基于 Chrome DevTools 調(diào)試器、采樣探查器、跟蹤探查器和內(nèi)存分析器的調(diào)試器:

          --inspect
          --cpusampler
          --cputracer
          --memsampler

          結(jié)論

          GraalVM 是一個多功能的項目,提供了許多有趣的功能,你可以將這些功能用于你的應(yīng)用程序,支持 Java、JVM 語言、JavaScript、Ruby、Python、R 等。

          從使用更好的即時編譯器,到構(gòu)建應(yīng)用程序的可執(zhí)行文件,再到以不同語言運行組件,現(xiàn)在你可以使用 GraalVM 了。

          在這篇簡短的參考文章中,我們試圖概括GraalVM 不同功能的最常用選項。

          下載 GraalVM 快速參考 PDF,打印出來,釘在墻上。讓它能不斷提醒你 GraalVM 項目是多么有趣,即使你目前只使用了一小部分功能。

          在進(jìn)行此功能時,下載GraalVM?從快速參考中嘗試一些東西,比如更快地運行 Java 應(yīng)用程序,使用 native images 使微服務(wù)更加貼近云原生,或者使用其他語言的庫來增強(qiáng)我們的應(yīng)用程序!

          譯者注

          譯者校對:mica如夢技術(shù)、PIG冷冷、JustAuth亞東、吳天狗

          原文鏈接:https://medium.com/graalvm/graalvm-quick-reference-b8d1dfe24241

          譯者說

          GraalVM 無疑是 ?Java 未來(5~10年)的一個大方向, 期待 Spring Boot 3 和 Spring Framework 6 對 GraalVM 的內(nèi)置支持。

          連接

          [1]

          pdf版本:?https://www.graalvm.org/uploads/1p/graalvm-quick-reference_a4.pdf

          [2]

          這個版本的 PDF:?https://www.graalvm.org/uploads/1p/graalvm-quick-reference_us-letter.pdf

          [3]

          預(yù)編譯為本機(jī)共享庫模式下運行:?https://www.graalvm.org/reference-manual/compiler/#compiler-operating-modes

          [4]

          優(yōu)化配置:?https://www.graalvm.org/reference-manual/jvm/Options/

          [5]

          Native Image:?https://www.graalvm.org/reference-manual/native-image/

          [6]

          可執(zhí)行文件:?https://www.graalvm.org/reference-manual/native-image/ImplementingNativeMethodsInJavaWithSVM/#create-a-shared-library

          [7]

          構(gòu)建靜態(tài)鏈接的二進(jìn)制文件:?https://www.graalvm.org/reference-manual/native-i

          [8]

          Truffle 框架:?https://www.graalvm.org/graalvm-as-a-platform/language-implementation-framework/

          [9]

          配置文件引導(dǎo)優(yōu)化:?https://www.graalvm.org/reference-manual/native-image/PGO/

          [10]

          多語言運行時:?https://www.graalvm.org/reference-manual/polyglot-programming/

          [11]

          限制資源量:?https://docs.oracle.com/en/graalvm/enterprise/20/docs/reference-manual/embed-languages/sandbox/

          [12]

          通用開發(fā)工具:?https://www.graalvm.org/docs/tools/


          往期推薦

          久等 | Spring Cloud Alibaba 2.2.4 發(fā)布

          2021 首發(fā) | Spring Boot 2.4.2 發(fā)布

          伊爾福德站正式通車!Spring Cloud 2020 發(fā)布

          Spring Boot 2.4.0 正式發(fā)布,全面擁抱云原生

          SpringCloud LoadBalancer灰度策略實現(xiàn)



          瀏覽 96
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(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>
                  日韩aaaaaaa | 真正免费av | 五月丁香六月色 | 中文字幕有码在线播放 | 日韩黄色免费 |