SlideShare a Scribd company logo
1 of 31
Download to read offline
© 2019 NTT DATA Corporation
2019/6/24 日本Springユーザ会主催 Spring I/O 2019報告会
株式会社NTTデータ システム技術本部 高須隼太
GraalVMの概要と、Native-Image化による
Spring Boot爆速化の夢
© 2019 NTT DATA Corporation 2
名前:高須 隼太(たかす はやた)
所属:株式会社NTTデータ
システム技術本部 インテグレーション技術センタ
仕事:Struts → Springのマイグレーションを専門として
様々な更改プロジェクトを支援しています
その他:JSUG 初参加
CodeZineにSpring I/O 2019参加レポートを寄稿予定!
誰?
© 2019 NTT DATA Corporation 3
Spring I/O 2019の講演内容を元に、
GraalVMって何?すごいの?
Springで使えそう?
をかいつまんで説明します
何しに来たの?
© 2019 NTT DATA Corporation 4
1. GraalVMってなに?
2. GraalVMを支える技術
– Graalコンパイラ
– Truffle
– Native Image
3. GraalVMをSpring Bootで使うには
– 起動JDKとしての利用
– Native Image化の現状と課題
– 今後の対応予定
もくじ
※1,2の引用元:『GraalVM for Java developers』 Oleg Šelajev – Oracle
© 2019 NTT DATA Corporation 5
• Oracleが開発した多言語対応の仮想マシン
• JVM言語のネイティブコンパイルに対応
• 2019年5月に本番運用可能バージョン「GraalVM 19.0」リリース
GraalVMってなに?
© 2019 NTT DATA Corporation 6
GraalVMの主要技術
GraalVM
Graal
コンパイラ
Truffle
Native
Image
© 2019 NTT DATA Corporation 7
GraalVMの主要技術
GraalVM
Graal
コンパイラ
Truffle
Native
Image
© 2019 NTT DATA Corporation 8
GraalVM従来のJVM
• JIT(Just-In-Time)コンパイラ
• Javaで実装されているため、維持保守や改良が容易
• 最適化技術に改良が加えられ、パフォーマンスが向上
Graalコンパイラ
HotSpot VM
Compiler Interface
C1コンパイラ C2コンパイラ
HotSpot VM
Compiler
Interface
C1コンパイラ
Graal
コンパイラ
JVMCI
C++
Java
© 2019 NTT DATA Corporation 9
JVMベンチマーク(Renaissance Benchmark Suite)
https://renaissance.dev/
• 従来のOpenJDKに比べて、様々なベンチマークで速度が向上!
© 2019 NTT DATA Corporation 10
Stream APIベンチマーク
private double[] values
= new double[2000000];
public double mapReduce() {
return Arrays.stream(values)
.map(x -> x + 1)
.map(x -> x * 2)
.map(x -> x + 5)
.reduce(0, Double::sum);
}
https://medium.com/graalvm/stream-api-performance-with-graalvm-be6cfe7fbb52
© 2019 NTT DATA Corporation 11
GraalVMの主要技術
GraalVM
Graal
コンパイラ
Truffle
Native
Image
© 2019 NTT DATA Corporation 12
• 言語インタプリタの実装フレームワーク
• 1つのVM上で様々な言語の相互運用が可能(Polyglot VM)
• Graalコンパイラを利用して高速実行が可能
Truffle
Truffle
LLVM
Graalコンパイラ
© 2019 NTT DATA Corporation 13
• Javaから他の言語を簡潔に呼び出し可能
Polyglot
import org.graalvm.polyglot.*;
public class HelloPolyglotWorld {
public static void main(String[] args) throws Exception {
System.out.println("Hello World from Java!");
Context context = Context.newBuilder().allowAllAccess(true).build();
context.eval("js", "print('Hello World from JavaScript!');");
context.eval("python", "print('Hello World from Python!')");
context.eval("ruby", "puts 'Hello World from Ruby!'");
context.eval("R", "print('Hello World from R!')");
}
}
© 2019 NTT DATA Corporation 14
JavaScriptベンチマーク(Octane benchmark)
https://medium.com/graalvm/oracle-graalvm-announces-support-for-nashorn-migration-c04810d75c1f
• Nashorn, Rhinoに比べて、圧倒的に速いJavaScript実行
© 2019 NTT DATA Corporation 15
GraalVMの主要技術
GraalVM
Graal
コンパイラ
Truffle
Native
Image
© 2019 NTT DATA Corporation 16
• JVM言語をAOT(Ahead-Of-Time)コンパイルしたもの
• VMが組込まれており、スタンドアロンで実行可能
• アプリ起動時にクラスロードや初期化処理が不要
→ 超高速起動が見込める!
Native Image
https://medium.com/graalvm/understanding-class-initialization-in-graalvm-native-image-generation-d765b7e4d6ed
Native Image
© 2019 NTT DATA Corporation 17
役に立ちそうなことは
わかった
© 2019 NTT DATA Corporation 18
じゃあ、Springでも
使えるのか?
© 2019 NTT DATA Corporation 19
• Spring Bootの起動JDKの代わりに使うなら超簡単
• インストールフォルダのbin/javaにパスを通すだけ
自分で試してみる
© 2019 NTT DATA Corporation 20
• Spring Bootの起動JDKの代わりに使うなら超簡単
• インストールフォルダのbin/javaにパスを通すだけ
• 起動が少し速くなっている
自分で試してみる
$ java –jar demo-0.0.1-SNAPSHOT.jar
…
INFO 1558 --- [main] com.example.demo.DemoApplication :
Started DemoApplication in 2.905 seconds (JVM running for 3.487)
$ java –jar demo-0.0.1-SNAPSHOT.jar
…
INFO 1561 --- [main] com.example.demo.DemoApplication :
Started DemoApplication in 2.65 seconds (JVM running for 3.283)
GraalVM CE 19.0.2 → 2.65秒(9%向上)
OpenJDK 12.0.1 → 2.905秒
※Hello Worldレスポンス返すだけのアプリで計測。繰り返して平均取っても大体同じくらい
© 2019 NTT DATA Corporation 21
• 残念ながら現時点では制約が多い・・・(そのままではコンパイルできない)
じゃあ目玉のNative Image化は?
https://github.com/oracle/graal/blob/master/substratevm/LIMITATIONS.md
https://github.com/spring-projects/spring-framework/issues/21529
静的なAOTコンパイルを適用するためには、
手動による追加設定・コマンド引数の指定が必要
Springはリフレクションやダイナミックプロキシによる
動的なクラス生成を多用
↓
https://github.com/spring-projects/spring-framework/issues/22968
Andy Clement (on GitHub)
「FW本体およびツールレベル両方で、
GraalVM用の機能を実装する必要がある」
https://github.com/spring-projects/spring-framework/wiki/GraalVM-native-image-support
※制約の詳細や現在の設定ノウハウ等はGitHub参照
© 2019 NTT DATA Corporation 22
• 2020年Q2のSpring 5.3でNative-Image化に対応予定!
今後の対応予定はあるの?
Juergen Hoeller
Spring開発リーダー
• Spring Boot Native-Image化機能の「乱雑なプロトタイプ」が開発・公開中
https://github.com/aclement/spring-boot-graal-feature
2020年Q2リリース予定のSpring 5.3では設定が
自動的に行われるよう、GraalVM開発チームと協力
して技術的課題の解決に努めていく。
© 2019 NTT DATA Corporation 23
• ダウンロード・ビルドする
• sample/demo のSpring Bootアプリ (Hello world) をネイティブイメージ化してみる
プロトタイプを自分で試してみる①
$ git clone https://github.com/aclement/spring-boot-graal-feature.git
$ mvn package
…
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ spring-boot-graal-feature ---
[INFO] Building jar: /xxx/spring-boot-graal-feature/target/spring-boot-graal-
feature-0.5.0.BUILD-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
$ sample/demo/compile.sh
© 2019 NTT DATA Corporation 24
• ダウンロード・ビルドする
• sample/demo のSpring Bootアプリ (Hello world) をネイティブイメージ化してみる
プロトタイプを自分で試してみる①
※2019/06時点の実装
$ git clone https://github.com/aclement/spring-boot-graal-feature.git
$ mvn package
…
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ spring-boot-graal-feature ---
[INFO] Building jar: /xxx/spring-boot-graal-feature/target/spring-boot-graal-
feature-0.5.0.BUILD-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
$ sample/demo/compile.sh
• 対象jarを分解して
• native化機能のクラスファイルにマージし、
• 引数にクラスパスを指定してnative-imageコマンドを叩く 実装になっている
© 2019 NTT DATA Corporation 25
• native compileに時間がかかったが、なんとか実行ファイルが完成
プロトタイプを自分で試してみる②
[demo:1255] [total]: 700,054.90 ms
© 2019 NTT DATA Corporation 26
• native compileに時間がかかったが、なんとか実行ファイルが完成
プロトタイプを自分で試してみる②
[demo:1255] [total]: 700,054.90 ms →
_人人人人人_
> 11分 <
 ̄Y^Y^Y^Y^Y^ ̄
© 2019 NTT DATA Corporation 27
• native compileに時間がかかったが、なんとか実行ファイルが完成
• 早速jar実行と比較してみる
プロトタイプを自分で試してみる②
[demo:1255] [total]: 700,054.90 ms →
_人人人人人_
> 11分 <
 ̄Y^Y^Y^Y^Y^ ̄
GraalVM CE 19.0.2 (native-image for Mac OS HS) → 0.081秒
$ ./demo
…
INFO: Started DemoApplication in 0.081 seconds (JVM running for 0.084)
$ java –jar demo-0.0.1-SNAPSHOT.jar
…
INFO 1558 --- [main] com.example.demo.DemoApplication :
Started DemoApplication in 2.905 seconds (JVM running for 3.487)
OpenJDK 12.0.1 → 2.905秒
※繰り返して平均取っても大体同じくらい
© 2019 NTT DATA Corporation 28
• native compileに時間がかかったが、なんとか実行ファイルが完成
• 早速jar実行と比較してみる
プロトタイプを自分で試してみる②
[demo:1255] [total]: 700,054.90 ms →
_人人人人人_
> 11分 <
 ̄Y^Y^Y^Y^Y^ ̄
GraalVM CE 19.0.2 (native-image for Mac OS HS) → 0.081秒
$ ./demo
…
INFO: Started DemoApplication in 0.081 seconds (JVM running for 0.084)
$ java –jar demo-0.0.1-SNAPSHOT.jar
…
INFO 1558 --- [main] com.example.demo.DemoApplication :
Started DemoApplication in 2.905 seconds (JVM running for 3.487)
OpenJDK 12.0.1 → 2.905秒
_人人人人人_
> 35倍 <
 ̄Y^Y^Y^Y^Y^ ̄
※繰り返して平均取っても大体同じくらい
© 2019 NTT DATA Corporation 29
• 起動速度は流石で、性能が重要なシステムにハマる余地はあるかも
• ただ、まだ発展途上感は否めない
• 複雑なSpringアプリケーションをNative化できるかは未知数
→ Native化可能なクラスは増えているが、まだ全てではない
• ビルド時間が非常に長い
→ OSやスペックによる気もするが・・・
• 来年のリリースに向けて今後に期待!
プロトタイプに関する所感
© 2019 NTT DATA Corporation 30
• GraalVM = 速く、様々な言語に対応している仮想マシン
• JDKの代わりに起動に使うだけでも有用かも
• Native-Image化で起動速度が爆速になるが、Spring Bootで使う
にはまだ課題有
• Spring 5.3で対応予定のため、2020まで待つべし!
• 開発中の機能が公開されているので試してみてもいいかも
まとめ
© 2019 NTT DATA Corporation

More Related Content

What's hot

Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) Hironobu Isoda
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugMasatoshi Tada
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService PrincipalToru Makabe
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 

What's hot (20)

Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
 
Quarkus入門
Quarkus入門Quarkus入門
Quarkus入門
 
Spring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjugSpring Bootの本当の理解ポイント #jjug
Spring Bootの本当の理解ポイント #jjug
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal3分でわかるAzureでのService Principal
3分でわかるAzureでのService Principal
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
GitLabのAutoDevOpsを試してみた
GitLabのAutoDevOpsを試してみたGitLabのAutoDevOpsを試してみた
GitLabのAutoDevOpsを試してみた
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
Guide To AGPL
Guide To AGPLGuide To AGPL
Guide To AGPL
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
KafkaとPulsar
KafkaとPulsarKafkaとPulsar
KafkaとPulsar
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 

Similar to GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢

Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くSpring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くapkiban
 
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用apkiban
 
Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...
Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...
Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...NTT DATA Technology & Innovation
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)NTT DATA Technology & Innovation
 
What happens in Spring Cloud Netflix
What happens in Spring Cloud NetflixWhat happens in Spring Cloud Netflix
What happens in Spring Cloud Netflixapkiban
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTT DATA Technology & Innovation
 
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...NTT DATA Technology & Innovation
 
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...NTT DATA Technology & Innovation
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)NTT DATA Technology & Innovation
 
Visual Studio 2019 Features & Tips @kosmosebi
Visual Studio 2019 Features & Tips @kosmosebiVisual Studio 2019 Features & Tips @kosmosebi
Visual Studio 2019 Features & Tips @kosmosebiKeiji Kamebuchi
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...NTT DATA Technology & Innovation
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)NTT DATA Technology & Innovation
 
Azure Network Security Group(NSG) はじめてのDeep Dive
Azure Network Security Group(NSG) はじめてのDeep DiveAzure Network Security Group(NSG) はじめてのDeep Dive
Azure Network Security Group(NSG) はじめてのDeep DiveYoshimasa Katakura
 
Tokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaTokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaHidenori Fujioka
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介bitbank, Inc. Tokyo, Japan
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所Toru Makabe
 
"Up" with vagrant and docker
"Up" with vagrant and docker"Up" with vagrant and docker
"Up" with vagrant and dockerHiroshi Miura
 
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現CData Software Japan
 

Similar to GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢 (20)

Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くSpring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
 
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用システム間連携を担うSpring Integrationのエンタープライズ開発での活用
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
 
Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...
Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...
Spark 3.0が目指す、よりインテリジェントなUnified Analytics Platform(db tech showcase 2019 Tok...
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
 
What happens in Spring Cloud Netflix
What happens in Spring Cloud NetflixWhat happens in Spring Cloud Netflix
What happens in Spring Cloud Netflix
 
AutoTVM紹介
AutoTVM紹介AutoTVM紹介
AutoTVM紹介
 
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
 
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
 
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...
Project Hydrogen and Spark Graph - 分散処理 × AIをより身近にする、Apache Sparkの新機能 - (NTTデ...
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
Visual Studio 2019 Features & Tips @kosmosebi
Visual Studio 2019 Features & Tips @kosmosebiVisual Studio 2019 Features & Tips @kosmosebi
Visual Studio 2019 Features & Tips @kosmosebi
 
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
今から始めるWebClient(JSUG勉強会 2020年その6 LT大会)
 
Azure Network Security Group(NSG) はじめてのDeep Dive
Azure Network Security Group(NSG) はじめてのDeep DiveAzure Network Security Group(NSG) はじめてのDeep Dive
Azure Network Security Group(NSG) はじめてのDeep Dive
 
Tokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by IidaTokyo H2O.ai Meetup#2 by Iida
Tokyo H2O.ai Meetup#2 by Iida
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
 
"Up" with vagrant and docker
"Up" with vagrant and docker"Up" with vagrant and docker
"Up" with vagrant and docker
 
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現CData Sync × Google BigQuery  3ステップで各データソースとのデータ連携を実現
CData Sync × Google BigQuery 3ステップで各データソースとのデータ連携を実現
 

More from apkiban

大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用apkiban
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告apkiban
 
新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとはapkiban
 
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 apkiban
 
TERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO PlatformTERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO Platformapkiban
 
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~apkiban
 
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~apkiban
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つapkiban
 
Spring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わるSpring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わるapkiban
 

More from apkiban (9)

大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用大規模・長期保守を見据えたエンタープライズシステム開発へのSpring Frameworkの適用
大規模・長期保守を見据えたエンタープライズ システム開発へのSpring Frameworkの適用
 
SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告SpringOne Platform 2018 全体報告
SpringOne Platform 2018 全体報告
 
新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは新しいTERASOLUNA Batch Frameworkとは
新しいTERASOLUNA Batch Frameworkとは
 
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」
 
TERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO PlatformTERASOLUNA Framework on the Spring IO Platform
TERASOLUNA Framework on the Spring IO Platform
 
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
Application Re-Architecture Technology ~ StrutsからSpring MVCへ ~
 
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
脆弱性の探し方 ~発見と対応のノウハウ in NTTDATA~
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つ
 
Spring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わるSpring 5 でSpring Test のここが変わる
Spring 5 でSpring Test のここが変わる
 

Recently uploaded

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Recently uploaded (8)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢

  • 1. © 2019 NTT DATA Corporation 2019/6/24 日本Springユーザ会主催 Spring I/O 2019報告会 株式会社NTTデータ システム技術本部 高須隼太 GraalVMの概要と、Native-Image化による Spring Boot爆速化の夢
  • 2. © 2019 NTT DATA Corporation 2 名前:高須 隼太(たかす はやた) 所属:株式会社NTTデータ システム技術本部 インテグレーション技術センタ 仕事:Struts → Springのマイグレーションを専門として 様々な更改プロジェクトを支援しています その他:JSUG 初参加 CodeZineにSpring I/O 2019参加レポートを寄稿予定! 誰?
  • 3. © 2019 NTT DATA Corporation 3 Spring I/O 2019の講演内容を元に、 GraalVMって何?すごいの? Springで使えそう? をかいつまんで説明します 何しに来たの?
  • 4. © 2019 NTT DATA Corporation 4 1. GraalVMってなに? 2. GraalVMを支える技術 – Graalコンパイラ – Truffle – Native Image 3. GraalVMをSpring Bootで使うには – 起動JDKとしての利用 – Native Image化の現状と課題 – 今後の対応予定 もくじ ※1,2の引用元:『GraalVM for Java developers』 Oleg Šelajev – Oracle
  • 5. © 2019 NTT DATA Corporation 5 • Oracleが開発した多言語対応の仮想マシン • JVM言語のネイティブコンパイルに対応 • 2019年5月に本番運用可能バージョン「GraalVM 19.0」リリース GraalVMってなに?
  • 6. © 2019 NTT DATA Corporation 6 GraalVMの主要技術 GraalVM Graal コンパイラ Truffle Native Image
  • 7. © 2019 NTT DATA Corporation 7 GraalVMの主要技術 GraalVM Graal コンパイラ Truffle Native Image
  • 8. © 2019 NTT DATA Corporation 8 GraalVM従来のJVM • JIT(Just-In-Time)コンパイラ • Javaで実装されているため、維持保守や改良が容易 • 最適化技術に改良が加えられ、パフォーマンスが向上 Graalコンパイラ HotSpot VM Compiler Interface C1コンパイラ C2コンパイラ HotSpot VM Compiler Interface C1コンパイラ Graal コンパイラ JVMCI C++ Java
  • 9. © 2019 NTT DATA Corporation 9 JVMベンチマーク(Renaissance Benchmark Suite) https://renaissance.dev/ • 従来のOpenJDKに比べて、様々なベンチマークで速度が向上!
  • 10. © 2019 NTT DATA Corporation 10 Stream APIベンチマーク private double[] values = new double[2000000]; public double mapReduce() { return Arrays.stream(values) .map(x -> x + 1) .map(x -> x * 2) .map(x -> x + 5) .reduce(0, Double::sum); } https://medium.com/graalvm/stream-api-performance-with-graalvm-be6cfe7fbb52
  • 11. © 2019 NTT DATA Corporation 11 GraalVMの主要技術 GraalVM Graal コンパイラ Truffle Native Image
  • 12. © 2019 NTT DATA Corporation 12 • 言語インタプリタの実装フレームワーク • 1つのVM上で様々な言語の相互運用が可能(Polyglot VM) • Graalコンパイラを利用して高速実行が可能 Truffle Truffle LLVM Graalコンパイラ
  • 13. © 2019 NTT DATA Corporation 13 • Javaから他の言語を簡潔に呼び出し可能 Polyglot import org.graalvm.polyglot.*; public class HelloPolyglotWorld { public static void main(String[] args) throws Exception { System.out.println("Hello World from Java!"); Context context = Context.newBuilder().allowAllAccess(true).build(); context.eval("js", "print('Hello World from JavaScript!');"); context.eval("python", "print('Hello World from Python!')"); context.eval("ruby", "puts 'Hello World from Ruby!'"); context.eval("R", "print('Hello World from R!')"); } }
  • 14. © 2019 NTT DATA Corporation 14 JavaScriptベンチマーク(Octane benchmark) https://medium.com/graalvm/oracle-graalvm-announces-support-for-nashorn-migration-c04810d75c1f • Nashorn, Rhinoに比べて、圧倒的に速いJavaScript実行
  • 15. © 2019 NTT DATA Corporation 15 GraalVMの主要技術 GraalVM Graal コンパイラ Truffle Native Image
  • 16. © 2019 NTT DATA Corporation 16 • JVM言語をAOT(Ahead-Of-Time)コンパイルしたもの • VMが組込まれており、スタンドアロンで実行可能 • アプリ起動時にクラスロードや初期化処理が不要 → 超高速起動が見込める! Native Image https://medium.com/graalvm/understanding-class-initialization-in-graalvm-native-image-generation-d765b7e4d6ed Native Image
  • 17. © 2019 NTT DATA Corporation 17 役に立ちそうなことは わかった
  • 18. © 2019 NTT DATA Corporation 18 じゃあ、Springでも 使えるのか?
  • 19. © 2019 NTT DATA Corporation 19 • Spring Bootの起動JDKの代わりに使うなら超簡単 • インストールフォルダのbin/javaにパスを通すだけ 自分で試してみる
  • 20. © 2019 NTT DATA Corporation 20 • Spring Bootの起動JDKの代わりに使うなら超簡単 • インストールフォルダのbin/javaにパスを通すだけ • 起動が少し速くなっている 自分で試してみる $ java –jar demo-0.0.1-SNAPSHOT.jar … INFO 1558 --- [main] com.example.demo.DemoApplication : Started DemoApplication in 2.905 seconds (JVM running for 3.487) $ java –jar demo-0.0.1-SNAPSHOT.jar … INFO 1561 --- [main] com.example.demo.DemoApplication : Started DemoApplication in 2.65 seconds (JVM running for 3.283) GraalVM CE 19.0.2 → 2.65秒(9%向上) OpenJDK 12.0.1 → 2.905秒 ※Hello Worldレスポンス返すだけのアプリで計測。繰り返して平均取っても大体同じくらい
  • 21. © 2019 NTT DATA Corporation 21 • 残念ながら現時点では制約が多い・・・(そのままではコンパイルできない) じゃあ目玉のNative Image化は? https://github.com/oracle/graal/blob/master/substratevm/LIMITATIONS.md https://github.com/spring-projects/spring-framework/issues/21529 静的なAOTコンパイルを適用するためには、 手動による追加設定・コマンド引数の指定が必要 Springはリフレクションやダイナミックプロキシによる 動的なクラス生成を多用 ↓ https://github.com/spring-projects/spring-framework/issues/22968 Andy Clement (on GitHub) 「FW本体およびツールレベル両方で、 GraalVM用の機能を実装する必要がある」 https://github.com/spring-projects/spring-framework/wiki/GraalVM-native-image-support ※制約の詳細や現在の設定ノウハウ等はGitHub参照
  • 22. © 2019 NTT DATA Corporation 22 • 2020年Q2のSpring 5.3でNative-Image化に対応予定! 今後の対応予定はあるの? Juergen Hoeller Spring開発リーダー • Spring Boot Native-Image化機能の「乱雑なプロトタイプ」が開発・公開中 https://github.com/aclement/spring-boot-graal-feature 2020年Q2リリース予定のSpring 5.3では設定が 自動的に行われるよう、GraalVM開発チームと協力 して技術的課題の解決に努めていく。
  • 23. © 2019 NTT DATA Corporation 23 • ダウンロード・ビルドする • sample/demo のSpring Bootアプリ (Hello world) をネイティブイメージ化してみる プロトタイプを自分で試してみる① $ git clone https://github.com/aclement/spring-boot-graal-feature.git $ mvn package … [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ spring-boot-graal-feature --- [INFO] Building jar: /xxx/spring-boot-graal-feature/target/spring-boot-graal- feature-0.5.0.BUILD-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS $ sample/demo/compile.sh
  • 24. © 2019 NTT DATA Corporation 24 • ダウンロード・ビルドする • sample/demo のSpring Bootアプリ (Hello world) をネイティブイメージ化してみる プロトタイプを自分で試してみる① ※2019/06時点の実装 $ git clone https://github.com/aclement/spring-boot-graal-feature.git $ mvn package … [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ spring-boot-graal-feature --- [INFO] Building jar: /xxx/spring-boot-graal-feature/target/spring-boot-graal- feature-0.5.0.BUILD-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS $ sample/demo/compile.sh • 対象jarを分解して • native化機能のクラスファイルにマージし、 • 引数にクラスパスを指定してnative-imageコマンドを叩く 実装になっている
  • 25. © 2019 NTT DATA Corporation 25 • native compileに時間がかかったが、なんとか実行ファイルが完成 プロトタイプを自分で試してみる② [demo:1255] [total]: 700,054.90 ms
  • 26. © 2019 NTT DATA Corporation 26 • native compileに時間がかかったが、なんとか実行ファイルが完成 プロトタイプを自分で試してみる② [demo:1255] [total]: 700,054.90 ms → _人人人人人_ > 11分 <  ̄Y^Y^Y^Y^Y^ ̄
  • 27. © 2019 NTT DATA Corporation 27 • native compileに時間がかかったが、なんとか実行ファイルが完成 • 早速jar実行と比較してみる プロトタイプを自分で試してみる② [demo:1255] [total]: 700,054.90 ms → _人人人人人_ > 11分 <  ̄Y^Y^Y^Y^Y^ ̄ GraalVM CE 19.0.2 (native-image for Mac OS HS) → 0.081秒 $ ./demo … INFO: Started DemoApplication in 0.081 seconds (JVM running for 0.084) $ java –jar demo-0.0.1-SNAPSHOT.jar … INFO 1558 --- [main] com.example.demo.DemoApplication : Started DemoApplication in 2.905 seconds (JVM running for 3.487) OpenJDK 12.0.1 → 2.905秒 ※繰り返して平均取っても大体同じくらい
  • 28. © 2019 NTT DATA Corporation 28 • native compileに時間がかかったが、なんとか実行ファイルが完成 • 早速jar実行と比較してみる プロトタイプを自分で試してみる② [demo:1255] [total]: 700,054.90 ms → _人人人人人_ > 11分 <  ̄Y^Y^Y^Y^Y^ ̄ GraalVM CE 19.0.2 (native-image for Mac OS HS) → 0.081秒 $ ./demo … INFO: Started DemoApplication in 0.081 seconds (JVM running for 0.084) $ java –jar demo-0.0.1-SNAPSHOT.jar … INFO 1558 --- [main] com.example.demo.DemoApplication : Started DemoApplication in 2.905 seconds (JVM running for 3.487) OpenJDK 12.0.1 → 2.905秒 _人人人人人_ > 35倍 <  ̄Y^Y^Y^Y^Y^ ̄ ※繰り返して平均取っても大体同じくらい
  • 29. © 2019 NTT DATA Corporation 29 • 起動速度は流石で、性能が重要なシステムにハマる余地はあるかも • ただ、まだ発展途上感は否めない • 複雑なSpringアプリケーションをNative化できるかは未知数 → Native化可能なクラスは増えているが、まだ全てではない • ビルド時間が非常に長い → OSやスペックによる気もするが・・・ • 来年のリリースに向けて今後に期待! プロトタイプに関する所感
  • 30. © 2019 NTT DATA Corporation 30 • GraalVM = 速く、様々な言語に対応している仮想マシン • JDKの代わりに起動に使うだけでも有用かも • Native-Image化で起動速度が爆速になるが、Spring Bootで使う にはまだ課題有 • Spring 5.3で対応予定のため、2020まで待つべし! • 開発中の機能が公開されているので試してみてもいいかも まとめ
  • 31. © 2019 NTT DATA Corporation