亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

GraalVM介紹及AOT編譯

2024-12-17 09:12:10
40
0

GraalVM是什么?

        GraalVM是Oracle推出的基于Java開發的開源的高性能多語言運行時平臺,即是一個高性能的JDK,旨在提供跨語言的互操作性、提高應用程序性能。 它的一個重要特性就是AOT(Ahead-Of-Time,提前編譯)編譯功能,它能夠將Java應用程序直接編譯成二進制可執行文件,因此,Java程序運行時不需要使用JVM,比如在Linux發行版系統上進行AOT編譯生成二進制可執行文件后,只需要將此二進制可執行文件復制到任意的Linux發行版系統上都可直接執行此Java程序。 GraalVM是Java靜態編譯技術的一個實現。

Java靜態編譯技術的誕生

       使用JVM啟動Java程序時,冷啟動開銷較大的問題長期存在,難以從根本上解決。在云原生應用的場景中,其負面影響尤為突出。如果應用的冷啟動時間超過了其實際執行的時間,用戶還要為不必要的啟動耗時付出無費用,用戶是難以有良好的使用體驗。Java靜態編譯技術是一個兼顧了Java已有生態又可以徹底解決冷啟動問題的技術方案。

GraalVM優勢

1.程序啟動速度快

通過GraalVM編譯得到的可執行文件,不再需要經過解釋器和JIT編譯,既避免了解釋執行的低效,因此可以實現極速啟動。

2.打包尺寸更小

由于可執行文件的運行不需要JVM虛擬機支持,在打包docker鏡像時可以選擇沒有JVM虛擬機的更小的基礎鏡像,因此可以得到更小的打包尺寸。

3.內存消耗低

JVM的運行也需要消耗一部分內存,去掉JVM后應用程序的內存占用可以得到大幅度降低。

GraalVM劣勢

1.編譯時間長,內存和CPU時間占用率高

靜態分析是資源密集型計算,需要消耗大量的內存和CPU時間。一般來說,人們對離線編譯的資源消耗的容忍度較高,但過長的時間會給用戶帶來開發,測試,驗證和部署等過程的效率方面的顧慮,從而限制了可能的應用場景。

2.動態特性支持不友好

靜態分析對反射的分析能力非常有限,對于實際中存在的大量反射GraalVM只能通過額外配置的方式加以解決。當代碼發生變化時,反射信息就有可能發生變化,配置也需要隨之變化,由此增加了維護成本和適配難度,而且配置難以覆蓋全部可能性,如有遺漏則會造成運行時錯誤,這對靜態編譯的廣泛應用也是一大阻礙。

3.運行時性能低于經過JIT編譯后基于HotSpot運行的Java程序

雖然啟動性能非常好,而且靜態編譯,也依據靜態分析的結果執行了各種編譯優化,但是因為缺少運行時的程序動態執行畫像數據,不能執行更有針對性的JIT編譯優化。因此,雖然編靜態編譯程序的性能表現穩定,但是沒有JIT編譯后的Java程序的性能高。

4.程序調試困難

因為GraalVM靜態編譯的產物是可執行文件,而不是再是Java的字節碼,所以靜態編譯的調試方法與傳統的Java程序是完全不同的,需要用本地代碼的調試器GDB(GNU Debugger)進行調試,這一本質區別決定了靜態編譯的調試體驗無法達到與傳統Java程序的相同水平,這也是靜態編譯的局限性之一。

AOT編譯步驟

1.環境要求:Centos 7 系統、安裝Maven、安裝GraalVM、安裝C語言編譯器(gcc、glibc-devel、zlib-devel)

2.Java服務改造:Springboot升級到3以上、對應的jar包升級至支持版本、添加插件plugin

<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>0.9.28</version>
<extensions>true</extensions>
<configuration>
<!-- 鏡像名稱 -->
<imageName>data-survey-demo</imageName>
<!-- 啟動類 -->
<mainClass>cn.chinatelecom.datawings.survey.app.DataSurveyApplication</mainClass>
<agent>
<enabled>true</enabled>
</agent>
</configuration>
</plugin>

3.靜態編譯過程:將代碼獲取至服務器上、執行編譯命令mvn -Pnative native:compile

4.編譯結果:得到可執行文件

 

 

0條評論
0 / 1000
l****n
4文章數
0粉絲數
l****n
4 文章 | 0 粉絲
l****n
4文章數
0粉絲數
l****n
4 文章 | 0 粉絲
原創

GraalVM介紹及AOT編譯

2024-12-17 09:12:10
40
0

GraalVM是什么?

        GraalVM是Oracle推出的基于Java開發的開源的高性能多語言運行時平臺,即是一個高性能的JDK,旨在提供跨語言的互操作性、提高應用程序性能。 它的一個重要特性就是AOT(Ahead-Of-Time,提前編譯)編譯功能,它能夠將Java應用程序直接編譯成二進制可執行文件,因此,Java程序運行時不需要使用JVM,比如在Linux發行版系統上進行AOT編譯生成二進制可執行文件后,只需要將此二進制可執行文件復制到任意的Linux發行版系統上都可直接執行此Java程序。 GraalVM是Java靜態編譯技術的一個實現。

Java靜態編譯技術的誕生

       使用JVM啟動Java程序時,冷啟動開銷較大的問題長期存在,難以從根本上解決。在云原生應用的場景中,其負面影響尤為突出。如果應用的冷啟動時間超過了其實際執行的時間,用戶還要為不必要的啟動耗時付出無費用,用戶是難以有良好的使用體驗。Java靜態編譯技術是一個兼顧了Java已有生態又可以徹底解決冷啟動問題的技術方案。

GraalVM優勢

1.程序啟動速度快

通過GraalVM編譯得到的可執行文件,不再需要經過解釋器和JIT編譯,既避免了解釋執行的低效,因此可以實現極速啟動。

2.打包尺寸更小

由于可執行文件的運行不需要JVM虛擬機支持,在打包docker鏡像時可以選擇沒有JVM虛擬機的更小的基礎鏡像,因此可以得到更小的打包尺寸。

3.內存消耗低

JVM的運行也需要消耗一部分內存,去掉JVM后應用程序的內存占用可以得到大幅度降低。

GraalVM劣勢

1.編譯時間長,內存和CPU時間占用率高

靜態分析是資源密集型計算,需要消耗大量的內存和CPU時間。一般來說,人們對離線編譯的資源消耗的容忍度較高,但過長的時間會給用戶帶來開發,測試,驗證和部署等過程的效率方面的顧慮,從而限制了可能的應用場景。

2.動態特性支持不友好

靜態分析對反射的分析能力非常有限,對于實際中存在的大量反射GraalVM只能通過額外配置的方式加以解決。當代碼發生變化時,反射信息就有可能發生變化,配置也需要隨之變化,由此增加了維護成本和適配難度,而且配置難以覆蓋全部可能性,如有遺漏則會造成運行時錯誤,這對靜態編譯的廣泛應用也是一大阻礙。

3.運行時性能低于經過JIT編譯后基于HotSpot運行的Java程序

雖然啟動性能非常好,而且靜態編譯,也依據靜態分析的結果執行了各種編譯優化,但是因為缺少運行時的程序動態執行畫像數據,不能執行更有針對性的JIT編譯優化。因此,雖然編靜態編譯程序的性能表現穩定,但是沒有JIT編譯后的Java程序的性能高。

4.程序調試困難

因為GraalVM靜態編譯的產物是可執行文件,而不是再是Java的字節碼,所以靜態編譯的調試方法與傳統的Java程序是完全不同的,需要用本地代碼的調試器GDB(GNU Debugger)進行調試,這一本質區別決定了靜態編譯的調試體驗無法達到與傳統Java程序的相同水平,這也是靜態編譯的局限性之一。

AOT編譯步驟

1.環境要求:Centos 7 系統、安裝Maven、安裝GraalVM、安裝C語言編譯器(gcc、glibc-devel、zlib-devel)

2.Java服務改造:Springboot升級到3以上、對應的jar包升級至支持版本、添加插件plugin

<plugin>
<groupId>org.graalvm.buildtools</groupId>
<artifactId>native-maven-plugin</artifactId>
<version>0.9.28</version>
<extensions>true</extensions>
<configuration>
<!-- 鏡像名稱 -->
<imageName>data-survey-demo</imageName>
<!-- 啟動類 -->
<mainClass>cn.chinatelecom.datawings.survey.app.DataSurveyApplication</mainClass>
<agent>
<enabled>true</enabled>
</agent>
</configuration>
</plugin>

3.靜態編譯過程:將代碼獲取至服務器上、執行編譯命令mvn -Pnative native:compile

4.編譯結果:得到可執行文件

 

 

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0