GraalVMを試してみました
遅まきながら、GraalVMのサイトのGetting Startを試してみました。
試してみるようdockerイメージが用意されています。Docker Desktopをインストール済みであればこれを使うのが簡単です。
サイトには、Node、Ruby、Pythonを使ったサンプルもありますがまずはJavaで試してみました。
手順
# docker image取得 $ docker pull oracle/graalvm-ce:19.1.1 # docker imageに接続 $ docker run -it oracle/graalvm-ce:19.1.1 bash bash-4.2# # 気持ち的にrootにファイルは作成しにくい bash-4.2# cd home # "Hello Word!"を出力するjavaファイル作成 bash-4.2# vi HelloWorld.java bash-4.2# cat HelloWorld.java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } bash-4.2# javac HelloWorld.java bash-4.2# java HelloWorld Hello, World! # native-imageを作成 # デフォルトでは入っていないのでダウンロードする bash-4.2# install native-image bash-4.2# native-image HelloWorld bash-4.2# ./helloWorld Hello, World! # バイナリをhexdumpする # elfファイルになっている。 bash-4.2# hexdump -C helloworld | head 00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............| 00000010 02 00 3e 00 01 00 00 00 00 10 40 00 00 00 00 00 |..>.......@.....| 00000020 40 00 00 00 00 00 00 00 d0 0c 23 00 00 00 00 00 |@.........#.....| 00000030 00 00 00 00 40 00 38 00 09 00 40 00 26 00 25 00 |....@.8...@.&.%.| 00000040 06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00 |........@.......| 00000050 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00 |@.@.....@.@.....| 00000060 f8 01 00 00 00 00 00 00 f8 01 00 00 00 00 00 00 |................| 00000070 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 |................| 00000080 38 02 00 00 00 00 00 00 38 02 40 00 00 00 00 00 |8.......8.@.....| 00000090 38 02 40 00 00 00 00 00 1c 00 00 00 00 00 00 00 |8.@.............| # ファイルサイズ bash-4.2# ls -l total 2256 -rwxr-xr-x 1 root root 2299472 Jul 21 01:23 helloworld -rw-r--r-- 1 root root 427 Jul 21 01:20 HelloWorld.class -rw-r--r-- 1 root root 116 Jul 21 01:20 HelloWorld.java # 実行時間 bash-4.2# time ./helloworld Hello, World! real 0m0.002s user 0m0.000s sys 0m0.000s bash-4.2# java HelloWorld Hello, World! bash-4.2# time java HelloWorld Hello, World! real 0m0.076s user 0m0.060s sys 0m0.000s
以下の記事はJavaフレームワークをnative-imageで起動した結果です。今後の動きから目が離せません。
あと、同じ著者が書いたこの記事も参考になります。 native-imageとJITは同程度だと思っていたのですが、JITの方がこんなに早いとは思いませんでした。