將Java編譯為本地代碼


將Java編譯為本地代碼

通常Java程序的執行流程為:將Java代碼編譯為Byte Code(字節碼),然后JVM執行引擎執行編譯好的Byte Code。這是一種中間語言的特性,它的好處就是可以做到平台的無關性,一份代碼可以在任意的平台上運行。而且JVM語言采用了JIT(Just In Time)即時編譯技術,會將執行中的熱點代碼(字節碼)編譯為本地代碼運行,提高代碼執行性能。

雖然Java的這種中間語言+即時編譯的技術有很多優點,同時也有很多缺點。比如JVM執行引擎執行會比較占用資源,而且JIT有熱加載的問題,所以執行的性能發揮不太穩定。對於軟件的發布來說,我們通常會將JRE連同我們的應用程序一同發布,這樣雖然能解決用戶PC上JRE版本與要求版本不一致問題,但是也增大了軟件包的體積。

針對上述JVM存在的問題,Oracel公司推出了一個名為GraalVM的項目,這個項目可以將Java字節碼編譯為本地代碼。編譯生成的本地代碼無須JVM,可以直接在目標機器上運行。而且這種AOT(Ahead Of Time)的編譯方式並不會對性能造成太大的影響,同時它還能夠減少運行時的內存占用與CPU資源消耗。具體的其他特性,可以查看GraalVM官網

GraalVM安裝(OSX)

GraalVM JDK可以與你本機的JDK互補的存在,GraalVM並沒有提供相應的安裝程序,而是以壓縮的包的形式進行發布,你可以從Github上進行下載:https://github.com/graalvm/graalvm-ce-builds/releases/tag/vm-21.0.0.2

下載完畢后解壓縮至相應目錄即可。

安裝完畢GraalVM之后,你可以安裝native-image本地代碼編譯工具,這個工具需要依賴於GraalVM,所以在安裝這個工具前,請先安裝GraalVM。native-image本地代碼編譯工具也可以在上文中的Github倉庫中進行下載,它也是壓縮包的形式進行發布的,下載下來解壓即可。但是與GraalVM不同的是這個工具並不是開箱即用,而是需要一些配置。

sudo xattr -r -d com.apple.quarantine /path/to/GRAALVM_HOME
<GraalVM安裝目錄>/Contents/Home/bin/gu install native-image

執行完這個命令后,native-image就會安裝到GraalVM的bin目錄下。

測試編譯本地代碼

Java源代碼:

public class Test
{
  public static void main(String... args)
  {
    System.out.println("Hello world");
  }
}

將源代碼編譯為字節碼:

javac Test.java

將字節碼編譯為本地代碼:

native-image Test


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM