SlideShare a Scribd company logo
JVM Language Summit
レポート
- GraalVM編 -
関西Javaエンジニアの会
阪田 浩一
#kanjava
About Me
• 阪田 浩一 (Koichi Sakata)
• KanJava JUG Leader/Founder
•
• Twitter: @jyukutyo
• Blog: sakatakoichi.com
• JVMになりたい人
– GCとJITコンパイラに関心
Today’s Target
GraalVMでの
ネイティブイメージ生成、
その概要と歴史を
知る
アジェンダ
• GraalVMとは
– 以前の関ジャバイベントの内容と重複します
• ネイティブイメージ生成機能の詳細
http://www.graalvm.org/
Question
GraalVMは
JVM?
GraalVMは
JVMの機能を
すべて包含します
既存のJVMにできることは
すべてできます
ベースはHotSpot VM
ただし、
JITコンパイラが
異なります
HotSpotVM
Compiler Interface
C2C1
HotSpotVM
C++
GraalVM
Compiler
Interface
GraalC1
HotSpotVM
JVMCI
Java
GraalVM ≠ Graal
Summary
• GraalVMは
–JVMにできることがすべてできる
–Java製JITコンパイラGraalを持つ
Graal JITコンパイラの
何がいいの?
Pros
• Graal上に構築した
言語実装用フレームワーク
Truffleがある
Truffle
• トラフル(トリュフ)
• 言語実装用フレームワーク
– ASTインタプリタ構築の基盤を提供する
Truffleで実装した言語を
(Graalを通し)
GraalVM上で実行できる
言語を実装して
何がうれしいの?
さまざまな言語を
実行できる環境として
高パフォーマンス
Polyglot on the JVM with Graal
さらに、その言語間で
相互に呼び出しできる
Truffleでの言語実装
HotSpot VM
JVMCI
Graal
JVM Lang Truffle
LLVMJS R Ruby
C C++
Fortran
Interpreter
GraalVMとは
高パフォーマンスな
多言語実行環境
Introduction to GraalVM and Native Image
Polyglot
=
多言語を実行できる
GraalVM
• 研究から生まれたプロダクト
– Oracle Labs
– ヨハネス・ケプラー大学
• オーストリア
• Compiler and JVM Research at JKU
– GraalやTruffleについての論文多数
• 大学内にOracle Labsのブランチがある
• オープンソース(Community Edition: 後述)
• https://github.com/oracle/graal
Introduction to GraalVM and Native Image
ついにWindowsも!
(Early Adopter Windows
Support)
Summary
• GraalVMは
–高パフォーマンスな多言語実行環境
–Polyglot VM
ネイティブイメージ化は
何なの?
Custom Part in GraalVM
• Graal
– JIT Compiler
• Truffle
– Language Implementation Framework
• Substrate VM
– Runtime Library and Tools for Java AOT Compiled
Code
AOTコンパイル
(Ahead-of-Time)
=
事前コンパイル
実行可能な
ネイティブイメージに
コンパイルする
つまり、JVM不要
クラスロードなし
起動が高速になる!
JITコンパイルしないので
ピーク時の
パフォーマンスは落ちる
OS, CPUなど
プラットフォームごとに
AOTコンパイルが必要
AOT/JITコンパイル
• AOTコンパイル(Javaでの)
– 実行前に、バイトコードから機械語に
• JITコンパイル(JVMでの)
– 実行中に、バイトコードと
プロファイルデータから機械語に
https://twitter.com/thomaswue/status/1145603781108928513
ネイティブイメージの利用想定対象
• FaaS
– AWS Lambda, Azure Functions...
– すぐに終了させる類のもの
• 多数起動するアプリケーション
– リソースの消費がコストに直結する
• とくにクラウド利用の場合
– 大規模サービスなど
– Quarkus, Micronaut, Helidonといった
対応フレームワークを利用する
もう1つ
JVM不要なため、
基本的に
ネイティブイメージは
iOS上でも動作させられる
(AppleはiOS上で
JVMを動作させることを
禁じている)
Java on iOS
• A plan to bring Java to iOS | InfoWorld
– https://www.infoworld.com/article/3407781/a-
plan-to-bring-java-to-ios.html
• Java on iOS, for real. - Gluon
– https://gluonhq.com/java-on-ios-for-real/
Summary
• Substrate VMは
–ネイティブイメージ生成時に利用
–生成したネイティブイメージを
実行する小型の仮想マシン
• GC, スレッドのスケジューリング,
コードのキャッシュなど
GraalVMは正式リリース
されているが、
ネイティブイメージは
experimentalなので注意
どんなコードでも
ネイティブイメージに
できる?
現状、
制約があります
https://github.com/oracle/graal/blob/master/substratevm/LIMITATIONS.md
そもそも、
ネイティブイメージ化は
限られたユースケースの
ためだった
初期設計時
• ユースケース
– Oracleデータベース MLEにGraalVMを組み込む
• Truffleを利用して、SQL文で多言語実行可能に
– https://www.sakatakoichi.com/entry/graalvmembeddeddb
Execute JavaScript Functions in SQL
SQL> select validator.isEmail('alice@example.com’)
from dual;
VALIDATOR.ISEMAIL('ALICE@EXAMPLE.COM’)
-------------------------------------- 1
SQL> select validator.isEmail('bob@example') from dual;
VALIDATOR.ISEMAIL('BOB@EXAMPLE’)
-------------------------------- 0
https://www.sakatakoichi.com/entry/graalvmembeddeddb
初期設計時
• Oracleデータベース向けということは…
– 同じ会社 (Oracle)内のみの利用
– サポートするOSも限定できる
– リフレクションやJNIのサポートは不要
– 初期化の速さと省メモリが必須
初期設計時
制約は多いが、
うまく機能した
ネイティブイメージは
いわばオマケだった
(個人的所感)
それが
GraalVMの1機能となり、
Oracleデータベース向け
という前提は
なくなった
改善を進めており、
制約のいくつかは
解消している
Introduction to GraalVM and Native Image
リフレクションとJNI
設定ファイル (JSON)を
用意すれば
利用可能
リフレクションサンプル
[
{
"name" : "java.lang.String",
"fields" : [
{ "name" : "value", "allowWrite" : true }
],
"methods" : [
{ "name" : "format", "parameterTypes" : ["java.lang.String",
"java.lang.Object[]"] }
]
}
]
事前に
使用箇所を
全部調べるの!?
Tracing Agent
リフレクションやJNIの
使用をトレースし、
設定ファイルを出力する
エージェント
Tracing Agent
• JVMTIエージェントが付属している
$ java -agentlib:native-image-agent...
アプリケーションのコードを
網羅するテストコードを実行し、
設定ファイルを出力させる
現実的には、
手作業での反映も
必要となる
クラス初期化での
課題
ネイティブイメージ生成プロセス
• インプット
– Javaクラスすべて
– ライブラリすべて
– VM (SubstrateVM)
ネイティブイメージ生成プロセス
アプリケーション
ライブラリ
JDK
SubstrateVM
下記の繰り返し:
解析ポイント
↓
初期化処理実行
↓
ヒープのスナップショット生成
ELFファイル
コード
(textセクション)
イメージヒープ
(dataセクション)
そもそもは、
イメージ生成時に
全クラスを
初期化していた
初期化の課題
import java.util.Date;
class Startup {
static final Date TIME = new Date();
}
class HelloStartupTime {
public static void main(String[] args) {
System.out.println("Startup: " + Startup.TIME);
System.out.println("Now: " + new Date());
}
}
実行結果
$ ./hellostartuptime
Startup: Fri Aug 16 20:31:06 JST 2019
Now: Fri Aug 16 20:31:32 JST 2019
現在は指定できる
• --initialize-at-build-time=[クラス名]
• --initialize-at-run-time=[クラス名]
$ ./native-image --initialize-at-build-time=Startup HelloStartupTime
$ ./hellostartuptime
Startup: Fri Aug 16 20:31:06 JST 2019
Now: Fri Aug 16 20:31:32 JST 2019
$ ./native-image --initialize-at-run-time=Startup HelloStartupTime
$ ./hellostartuptime
Startup: Fri Aug 16 20:38:24 JST 2019
Now: Fri Aug 16 20:38:24 JST 2019
ただし、実行時の
初期化は
パフォーマンスに
影響する
クラスの初期化は
トリッキーであり、
思ったように
動作しない場合も
まだある
ネイティブイメージ化のサポート
• Linux, macOSのみ
– Windows対応は課題だが、多くの作業が必要
• Java 8のみ
– Java 8, 11, 13で異なる部分がある
– GraalVM自体がJava 8バージョンのみ
– GraalVM自体のJava 11対応は作業中
ネイティブイメージ化のサポート
• 現状 x64のみ
– GraalVM自体は x64, AArch64, Sparcをサポート
• LLVMの利用も検討中だが…
– 代償を伴うとのこと
ライブラリのネイティブイメージ対応
• ライブラリのMETA-INF/native-image
– 設定ファイルを配置する
– Nettyなど対応済みのものも
Wrap Up
GraalVM is AWESOME!
Fin.

More Related Content

What's hot (19)

PDF
Ruby紹介
Masahiro Tomita
 
PDF
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
PDF
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
 
PDF
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
 
PPTX
.NET Compiler Platform
信之 岩永
 
PDF
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
tamtam180
 
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
 
PDF
Qt5 の新機能 2012/12/15
Takumi Asaki
 
PPTX
OpenShift from Easy way to Hard ? Way
ロフト くん
 
PDF
プログラミング言語Clojureのニャンパスでの活用事例
sohta
 
PDF
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
 
PDF
キメるClojure
Yoshitaka Kawashima
 
PDF
Laravel5.1 Release
Yuuki Takezawa
 
PDF
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
bitter_fox
 
PPTX
今日から始めるLaravel
Masaru Matsuo
 
PDF
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
Yuta Matsumura
 
PDF
chat bot framework for Java8
masahitojp
 
PDF
async/awaitダークサイド is 何
Kouji Matsui
 
PDF
Async DeepDive basics
Kouji Matsui
 
Ruby紹介
Masahiro Tomita
 
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
 
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
 
.NET Compiler Platform
信之 岩永
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
tamtam180
 
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
 
Qt5 の新機能 2012/12/15
Takumi Asaki
 
OpenShift from Easy way to Hard ? Way
ロフト くん
 
プログラミング言語Clojureのニャンパスでの活用事例
sohta
 
いまどきのPHP開発現場 -2015年秋-
Masashi Shinbara
 
キメるClojure
Yoshitaka Kawashima
 
Laravel5.1 Release
Yuuki Takezawa
 
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
bitter_fox
 
今日から始めるLaravel
Masaru Matsuo
 
イケてる技術で品質を担保しつつスピード感のある開発を実現する冴えたやり方
Yuta Matsumura
 
chat bot framework for Java8
masahitojp
 
async/awaitダークサイド is 何
Kouji Matsui
 
Async DeepDive basics
Kouji Matsui
 

Similar to Introduction to GraalVM and Native Image (20)

PDF
Gradle handson
Nemoto Yusuke
 
PDF
コンテナ環境でJavaイメージを小さくする方法!
オラクルエンジニア通信
 
PDF
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
 
PDF
これからのJDK/JVM 何を選ぶ?どう選ぶ?
Takahiro YAMADA
 
PDF
Grailsのススメ(仮)
Tsuyoshi Yamamoto
 
PPTX
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
NTT DATA Technology & Innovation
 
PDF
Play jjug2012spring
Takafumi Ikeda
 
PDF
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
Takakiyo Tanaka
 
PDF
JavaOne2015報告またはこれからのJava
なおき きしだ
 
PDF
Play frameworkの概要
Shuhei Kaneko
 
PDF
Getting Started GraalVM (再アップロード)
tamtam180
 
PDF
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
PE-BANK
 
PDF
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
 
PDF
Java in the World of Container by David Buck
オラクルエンジニア通信
 
PDF
明日から使えるgradle
kimukou_26 Kimukou
 
PDF
Scalaでのプログラム開発
Kota Mizushima
 
PPTX
Oracleがnode.jsをやり始めたというのだが!
Hiroshi Hayakawa
 
PDF
Java によるクラウドネイティブ の実現に向けて
Shigeru Tatsuta
 
PDF
VMの歩む道。 Dalvik、ART、そしてJava VM
yy yank
 
PDF
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
 
Gradle handson
Nemoto Yusuke
 
コンテナ環境でJavaイメージを小さくする方法!
オラクルエンジニア通信
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
 
これからのJDK/JVM 何を選ぶ?どう選ぶ?
Takahiro YAMADA
 
Grailsのススメ(仮)
Tsuyoshi Yamamoto
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
NTT DATA Technology & Innovation
 
Play jjug2012spring
Takafumi Ikeda
 
クラウド、クラウドというけれどJavaのシステムにとってクラウドってメリットあるの?
Takakiyo Tanaka
 
JavaOne2015報告またはこれからのJava
なおき きしだ
 
Play frameworkの概要
Shuhei Kaneko
 
Getting Started GraalVM (再アップロード)
tamtam180
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
PE-BANK
 
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
 
Java in the World of Container by David Buck
オラクルエンジニア通信
 
明日から使えるgradle
kimukou_26 Kimukou
 
Scalaでのプログラム開発
Kota Mizushima
 
Oracleがnode.jsをやり始めたというのだが!
Hiroshi Hayakawa
 
Java によるクラウドネイティブ の実現に向けて
Shigeru Tatsuta
 
VMの歩む道。 Dalvik、ART、そしてJava VM
yy yank
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
 
Ad

More from Koichi Sakata (20)

PPTX
Introduction to JIT Compiler in JVM
Koichi Sakata
 
PPTX
Bytecode Manipulation with a Java Agent and Byte Buddy
Koichi Sakata
 
PPTX
Great Ideas in GraalVM
Koichi Sakata
 
PPTX
Graal in GraalVM - A New JIT Compiler
Koichi Sakata
 
PPTX
Kanjava 201804 Java News
Koichi Sakata
 
PPTX
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
Koichi Sakata
 
PPTX
from Java EE to Jakarta EE
Koichi Sakata
 
PPTX
Java release cadence has been changed and about Project Amber
Koichi Sakata
 
PPTX
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
 
PPTX
KANJAVA PARTY 2017 前説
Koichi Sakata
 
PPTX
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Koichi Sakata
 
PPTX
“Purikura” culture in Japan and our web application architecture
Koichi Sakata
 
PPTX
デブサミ2017 Javaコミュニティ作ったら人生変わった
Koichi Sakata
 
PPTX
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Koichi Sakata
 
PPTX
日本からJavaOneに行こう!
Koichi Sakata
 
PPTX
Seasar2で作った俺たちのサービスの今
Koichi Sakata
 
PDF
How Scala code is expressed in the JVM
Koichi Sakata
 
PDF
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
Koichi Sakata
 
PDF
DevLOVE関西 5年目、10年目の自分戦略 20141030
Koichi Sakata
 
PDF
JITコンパイルはじめの一歩
Koichi Sakata
 
Introduction to JIT Compiler in JVM
Koichi Sakata
 
Bytecode Manipulation with a Java Agent and Byte Buddy
Koichi Sakata
 
Great Ideas in GraalVM
Koichi Sakata
 
Graal in GraalVM - A New JIT Compiler
Koichi Sakata
 
Kanjava 201804 Java News
Koichi Sakata
 
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
Koichi Sakata
 
from Java EE to Jakarta EE
Koichi Sakata
 
Java release cadence has been changed and about Project Amber
Koichi Sakata
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
Koichi Sakata
 
KANJAVA PARTY 2017 前説
Koichi Sakata
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
Koichi Sakata
 
“Purikura” culture in Japan and our web application architecture
Koichi Sakata
 
デブサミ2017 Javaコミュニティ作ったら人生変わった
Koichi Sakata
 
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Koichi Sakata
 
日本からJavaOneに行こう!
Koichi Sakata
 
Seasar2で作った俺たちのサービスの今
Koichi Sakata
 
How Scala code is expressed in the JVM
Koichi Sakata
 
クリスマスを支える俺たちとJava(JJUG CCC 2015 Spring AB4)
Koichi Sakata
 
DevLOVE関西 5年目、10年目の自分戦略 20141030
Koichi Sakata
 
JITコンパイルはじめの一歩
Koichi Sakata
 
Ad

Recently uploaded (10)

PDF
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
PDF
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
PDF
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
PDF
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
PDF
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
PDF
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
PDF
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
PDF
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
PDF
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 
プライバシ保護のためのインターネットアーキテクチャの進化 (2025-07-11)
Jun Kurihara
 
Hyperledger Fabric最新v3.x系での機能強化、変更点にキャッチアップ!
LFDT Tokyo Meetup
 
ABC2025S LT講演「世界の窓から Androidこんにちは2025」アプリ自動生成の将来?ロボティクスの夢再び?
嶋 是一 (Yoshikazu SHIMA)
 
20250630_aws_reinforce_2025_aws_sheild_network_security_director
uedayuki
 
SIG-AUDIO 2025 Vol.02 オンラインセミナー SIG-Audioプレゼン資料_オーディオプラグイン開発_塩澤達矢.pdf
IGDA Japan SIG-Audio
 
人気ブロックチェーン基盤「Hyperledger Fabric」最新版を動かしてみた!
LFDT Tokyo Meetup
 
生成AIパネルトーク(Interop25Tokyo APPS JAPAN M1-07,M2-07 嶋ポジショントーク)
嶋 是一 (Yoshikazu SHIMA)
 
[Hardening Designers Confernece 2025]ランサムウェアでの見えざるログ・見えるログ
kataware
 
Hyperledger Fabric公式サンプル fabric-samples徹底解説
LFDT Tokyo Meetup
 
20250710_Devinで切り拓くDB革命_〜価値創出に集中せよ〜.pdf
Masaki Yamakawa
 

Introduction to GraalVM and Native Image