SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
© 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

Contenu connexe

Tendances

怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント土岐 孝平
 
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にあるde:code 2017
 
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)Kazuya Sugimoto
 
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜aha_oretama
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてShigeru Tatsuta
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと土岐 孝平
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
エラー・バジェットによるリスク管理 Managing risk with error budgets
エラー・バジェットによるリスク管理 Managing risk with error budgetsエラー・バジェットによるリスク管理 Managing risk with error budgets
エラー・バジェットによるリスク管理 Managing risk with error budgetsGoogle Cloud Platform - Japan
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと心 谷本
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -onozaty
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本kazuki kumagai
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門Yoichi Kawasaki
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
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
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
JIRA / Confluence の 必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだJIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の 必須プラグインはこれだNarichika Kajihara
 

Tendances (20)

怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイントSpringを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
 
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
 
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
 
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
エラー・バジェットによるリスク管理 Managing risk with error budgets
エラー・バジェットによるリスク管理 Managing risk with error budgetsエラー・バジェットによるリスク管理 Managing risk with error budgets
エラー・バジェットによるリスク管理 Managing risk with error budgets
 
Rest ful api設計入門
Rest ful api設計入門Rest ful api設計入門
Rest ful api設計入門
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
Spring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のことSpring Bootをはじめる時にやるべき10のこと
Spring Bootをはじめる時にやるべき10のこと
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
JIRA / Confluence の 必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだJIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の 必須プラグインはこれだ
 

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

GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)NTT DATA Technology & Innovation
 
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
 
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
 

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

GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
 
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デ...
 
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ステップで各データソースとのデータ連携を実現
 

Plus de 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
 

Plus de 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 のここが変わる
 

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