Graalvm上手體驗


一、安裝GraalVM

官方文檔:Getting Started with GraalVM

GraalVM下載,GraalVM官方提供了社區版和企業版。直接下載社區版,可以選擇基於java8或基於java11等不同環境的版本。由於我使用的java8,所以下載基於java8的版本。

1.下載后解壓,設置環境變量

JAVA_HOME = C:\dev\Tools\graalvm-ce-java8-21.1.0

GRAALVM_HOME = C:\dev\Tools\graalvm-ce-java8-21.1.0

PATH中添加  %GRAALVM_HOME%\bin

2.安裝native-image 

配置好環境變量后,{GRAALVM_HOME}/bin/gu就能直接訪問了

C:\Users\lp>gu install native-image
Downloading: Component catalog from www.graalvm.org
Processing Component: Native Image
Downloading: Component native-image: Native Image  from github.com
Installing new component: Native Image (org.graalvm.native-image, version 21.1.0)

3.windows平台安裝Microsoft Visual C++ (MSVC)

如果在實踐中出現以下錯誤,則是沒有安裝MSVC或者沒有進行環境初始化。

Error: Default native-compiler executable 'cl.exe' not found via environment variable PATH

 

在windows平台上build本地GraalVM鏡像,就需要安裝Microsoft Visual C++ (MSVC)。MSVC的版本取決於GraalVM依賴的java版本。具體詳情參考官方說明:Prerequisites for Using Native Image on Windows

官方的解決方法如下:

1)基於JDK8的GraalVM,需要MSVC 2010 SP1 version,並推薦的安裝方法是使用Microsoft Windows SDK 7.1:直接從Window SDK 7.1 image from Microsoft下載GRMSDKX_EN_DVD.iso,然后F:\Setup\SDKSetup.exe直接掛起鏡像。(這里不知道官方文檔想表達什么意思,我直接安裝后也不起作用。最后我直接安裝Visual Studio 2017 Visual C++ Build Tools解決問題。)

2)基於JDK11的GraalVM,需要MSVC 2017 15.5.5或之后版本。

stackoverflow上也有該問題:cl.exe missing when building native app using GraalVM

 

4.初始化環境

直接執行命令初始化環境

#VS2017
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"

#VS2019
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\ Build\vcvars64.bat”

或者手動點擊命令提示符來初始化

我直接使用命令來初始化,如下

D:\>call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvars64.bat"
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.0
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'

二、入門案例

1.先編寫一段Java代碼

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello, World!");
  }
}

手動編譯

D:\>javac HelloWorld.java

運行,輸出“Hello World”,表明程序沒有問題。

D:\>java HelloWorld
Hello, World!

2.編譯

D:\>native-image HelloWorld
[helloworld:11552]    classlist:   8,569.48 ms,  1.14 GB
[helloworld:11552]        (cap):   3,427.01 ms,  1.14 GB
[helloworld:11552]        setup:   7,834.29 ms,  1.62 GB
[helloworld:11552]     (clinit):     182.21 ms,  1.62 GB
[helloworld:11552]   (typeflow):   7,517.48 ms,  1.62 GB
[helloworld:11552]    (objects):   4,503.86 ms,  1.62 GB
[helloworld:11552]   (features):     279.05 ms,  1.62 GB
[helloworld:11552]     analysis:  12,821.36 ms,  1.62 GB
[helloworld:11552]     universe:     635.62 ms,  1.62 GB
[helloworld:11552]      (parse):   2,408.88 ms,  1.65 GB
[helloworld:11552]     (inline):   2,643.45 ms,  1.65 GB
[helloworld:11552]    (compile):  14,668.37 ms,  1.87 GB
[helloworld:11552]      compile:  20,715.77 ms,  1.87 GB
[helloworld:11552]        image:   1,928.67 ms,  1.87 GB
[helloworld:11552]        write:   3,047.36 ms,  1.87 GB
# Printing build artifacts to: helloworld.build_artifacts.txt
[helloworld:11552]      [total]:  56,019.11 ms,  1.87 GB 

3.運行

注意,生成的可執行文件名稱大小寫。

D:\>helloworld
Hello, World!

 


免責聲明!

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



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