Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
© 2020 NTT DATA Corporation
まだまだ進化するJVM!
2020年10月4日 J Lang Fest Kansai Online #1
株式会社NTTデータ 技術開発本部
阪田 浩一
© 2020 NTT DATA Corporation 2
自己紹介
• 阪田 浩一(さかた -)
• 通称 じゅくちょー
• JVMになりたい人
• NTTデータでJava/OpenJDK + GraalVM
の研究開発とそのサポート業に従事...
© 2020 NTT DATA Corporation 3
JVMは
25年間にわたり
進化してきた
© 2020 NTT DATA Corporation 4
これまでのJVMの進化
• Javaは遅い、おもちゃだ(という初期の評価)
• 大きな機能にも多くの変更があった
• JITコンパイル
• そもそも最初はJITコンパイルがなかった
•...
© 2020 NTT DATA Corporation 5
Javaの研究ロードマップ
Java 15
リリース
現在 近い未来
• Project Valhalla
• Inline Typesで
バイトコードも追加
• Project Lo...
© 2020 NTT DATA Corporation 6
JVMを
再実装する!
(ランタイムの重要な部分中心)
© 2020 NTT DATA Corporation 7
それが
Project Metropolis
OpenJDK: Metropolis https://openjdk.java.net/projects/metropolis/
© 2020 NTT DATA Corporation 8
再実装とは?
C++の既存実装
↓
Javaで再実装
© 2020 NTT DATA Corporation 9
Java on Java
© 2020 NTT DATA Corporation 10
Javaで再実装するメリット
1. JVM自体の最適化をより詳細にコントロールできる
2. 他言語を使わない、Javaのみであることで
他言語自体の変更の影響を受けずに済む
• C+...
© 2020 NTT DATA Corporation 11
リスクが大きい?
• 前提:インキュベーションプロジェクトである
1. Javaとなることで、JVM起動のパフォーマンスが悪くなるリスク
2. そのJavaコードへのGCやJITコン...
© 2020 NTT DATA Corporation 12
とはいえすでに
Java on Javaで
作られた部分があります
© 2020 NTT DATA Corporation 13
どの部分だと
思いますか??
© 2020 NTT DATA Corporation 14
答え:
JITコンパイラ
© 2020 NTT DATA Corporation 15
GraalVMの
JITコンパイラ
© 2020 NTT DATA Corporation 16
HotSpotで動作する
Java実装のJITコンパイラを
作ったことが
Graal(VM)のスタート
© 2020 NTT DATA Corporation 17
GraalVMとHotSpot VM
• GraalVMはHotSpot VMがベース
HotSpot VM
Compiler Interface
C2C1
HotSpot VM
C...
© 2020 NTT DATA Corporation 18
GraalVMとの関係性
• GraalVM
• Oracle Labsが開発した
Java製JITコンパイラがベース
• GraalVM JITコンパイラ(graal)
• Ope...
© 2020 NTT DATA Corporation 19
GraalVMとの関係性
• GraalVMのネイティブイメージ生成機能
• クラスファイルから実行ファイルを生成し、
JVMを利用せずにアプリケーションを実行可能とする
© 2020 NTT DATA Corporation 20
GraalVMのネイティブイメージ機能
• AOT(Ahead-of-Time:事前)コンパイル
「実行前」に
機械語へコンパイル!
© 2020 NTT DATA Corporation 21
JITコンパイル
「実行中」に
機械語へコンパイル!
JVM
© 2020 NTT DATA Corporation 22
超簡略化して考えると…
❌
「実行中」に
機械語へコンパイル!
「実行前」に
機械語へコンパイル!
© 2020 NTT DATA Corporation 23
同じようなことを
やっているように
見えませんか?
© 2020 NTT DATA Corporation 24
(追加スライド)
2つのコンパイラの処理は
重なる部分があったため、
このJITコンパイラを元にして
ネイティブイメージ生成機能を
作ることができた
© 2020 NTT DATA Corporation 25
JITコンパイラが
Javaで書かれていると
© 2020 NTT DATA Corporation 26
JITコンパイラの
Javaコードも
JITコンパイルする
必要がある
© 2020 NTT DATA Corporation 27
つまり
アプリケーション起動時に
その分の時間がかかる
© 2020 NTT DATA Corporation 28
JITコンパイラの
コードをAOTコンパイル
(ネイティブコンパイル)
してしまえば
ある程度解決できる
© 2020 NTT DATA Corporation 29
JITコンパイラコードのコンパイル
JavaでJITコンパイラを書く
↓
そうなるとJITコンパイラのJavaコードを
JITコンパイルすることが必要
↓
あらかじめJITコンパイラ...
© 2020 NTT DATA Corporation 30
次にJavaに置き換える
ものも同じようにする
© 2020 NTT DATA Corporation 31
JVMとGraalVMは
互いに影響を
及ぼし合っている
© 2020 NTT DATA Corporation 32
ネイティブコンパイルを採用するトレードオフ
• 事前にコンパイルしたものを使うので、
利用できない機能が出てくる
• コードのinstrumentation
• 動的な再最適化
• ...
© 2020 NTT DATA Corporation 33
Project Metropolisの現在
• 現在:Java 15ベースのEAビルドがある
• https://jdk.java.net/metropolis/
• GraalVM...
© 2020 NTT DATA Corporation 34
今後想定される前提作業
• Java on Javaするにはその機能のコンポーネントの
JVM内でインタフェースを定義、整備する
• 例:JITコンパイラの場合
• JEP 243:...
© 2020 NTT DATA Corporation 35
まとめ
• Project Metropolis
• Java on JavaでJVMを再実装していく!
• GraalVM JITコンパイラを足がかりにしていく!
© 2020 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です
Prochain SlideShare
Chargement dans…5
×

まだまだ進化するJVM!(J Lang Fest Kansai Online #1 講演資料)

まだまだ進化するJVM!
(J Lang Fest Kansai Online #1 講演資料)

2020年10月4日
株式会社NTTデータ 技術開発本部
阪田 浩一

  • Soyez le premier à commenter

まだまだ進化するJVM!(J Lang Fest Kansai Online #1 講演資料)

  1. 1. © 2020 NTT DATA Corporation まだまだ進化するJVM! 2020年10月4日 J Lang Fest Kansai Online #1 株式会社NTTデータ 技術開発本部 阪田 浩一
  2. 2. © 2020 NTT DATA Corporation 2 自己紹介 • 阪田 浩一(さかた -) • 通称 じゅくちょー • JVMになりたい人 • NTTデータでJava/OpenJDK + GraalVM の研究開発とそのサポート業に従事しています • Javaチャンピオン • OpenJDK Author jyukutyo
  3. 3. © 2020 NTT DATA Corporation 3 JVMは 25年間にわたり 進化してきた
  4. 4. © 2020 NTT DATA Corporation 4 これまでのJVMの進化 • Javaは遅い、おもちゃだ(という初期の評価) • 大きな機能にも多くの変更があった • JITコンパイル • そもそも最初はJITコンパイルがなかった • -client/-server から階層型コンパイルへ • GCアルゴリズム • CMSに至っては1.4で追加され、14で削除された • 最近でもShenandoah、ZGCを追加した • バイトコード命令の数は1つしか増えていない • invokedynamic
  5. 5. © 2020 NTT DATA Corporation 5 Javaの研究ロードマップ Java 15 リリース 現在 近い未来 • Project Valhalla • Inline Typesで バイトコードも追加 • Project Loom • 仮想スレッドを追加 • Project Panama • JVMとネイティブコード の相互運用改善 さらに未来 ???
  6. 6. © 2020 NTT DATA Corporation 6 JVMを 再実装する! (ランタイムの重要な部分中心)
  7. 7. © 2020 NTT DATA Corporation 7 それが Project Metropolis OpenJDK: Metropolis https://openjdk.java.net/projects/metropolis/
  8. 8. © 2020 NTT DATA Corporation 8 再実装とは? C++の既存実装 ↓ Javaで再実装
  9. 9. © 2020 NTT DATA Corporation 9 Java on Java
  10. 10. © 2020 NTT DATA Corporation 10 Javaで再実装するメリット 1. JVM自体の最適化をより詳細にコントロールできる 2. 他言語を使わない、Javaのみであることで 他言語自体の変更の影響を受けずに済む • C++自体も新バージョンが当然出る 3. OpenJDK開発者の労力削減と門戸を広げられる • スキルとしてJavaとC++の両方が必要だった 4. 新ハードウェア対応や新バイトコード導入といった機能追加の 速度を向上できる Call for Discussion: New Project: Metropolis https://cr.openjdk.java.net/~jrose/metropolis/Metropolis-Proposal.html
  11. 11. © 2020 NTT DATA Corporation 11 リスクが大きい? • 前提:インキュベーションプロジェクトである 1. Javaとなることで、JVM起動のパフォーマンスが悪くなるリスク 2. そのJavaコードへのGCやJITコンパイルの動作が、 アプリケーションの実行に影響するリスク 3. 現在のJavaにはC++にある高密度のデータ構造が ないことによるパフォーマンスのリスク • 例:配列のメモリレイアウト 4. 実装を変更することで品質とパフォーマンスの低下リスク Call for Discussion: New Project: Metropolis https://cr.openjdk.java.net/~jrose/metropolis/Metropolis-Proposal.html
  12. 12. © 2020 NTT DATA Corporation 12 とはいえすでに Java on Javaで 作られた部分があります
  13. 13. © 2020 NTT DATA Corporation 13 どの部分だと 思いますか??
  14. 14. © 2020 NTT DATA Corporation 14 答え: JITコンパイラ
  15. 15. © 2020 NTT DATA Corporation 15 GraalVMの JITコンパイラ
  16. 16. © 2020 NTT DATA Corporation 16 HotSpotで動作する Java実装のJITコンパイラを 作ったことが Graal(VM)のスタート
  17. 17. © 2020 NTT DATA Corporation 17 GraalVMとHotSpot VM • GraalVMはHotSpot VMがベース HotSpot VM Compiler Interface C2C1 HotSpot VM C++ GraalVM Compiler Interface GraalC1 HotSpot VM JVMCI Java
  18. 18. © 2020 NTT DATA Corporation 18 GraalVMとの関係性 • GraalVM • Oracle Labsが開発した Java製JITコンパイラがベース • GraalVM JITコンパイラ(graal) • OpenJDKにもそのJITコンパイラがポートされている • JEP 317: Experimental Java-Based JIT Compiler • -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler で実際にC2コンパイラと入れ替えて使えます みんなのJava OpenJDKから始まる大変革期! https://gihyo.jp/book/2020/978-4-297-11199-1
  19. 19. © 2020 NTT DATA Corporation 19 GraalVMとの関係性 • GraalVMのネイティブイメージ生成機能 • クラスファイルから実行ファイルを生成し、 JVMを利用せずにアプリケーションを実行可能とする
  20. 20. © 2020 NTT DATA Corporation 20 GraalVMのネイティブイメージ機能 • AOT(Ahead-of-Time:事前)コンパイル 「実行前」に 機械語へコンパイル!
  21. 21. © 2020 NTT DATA Corporation 21 JITコンパイル 「実行中」に 機械語へコンパイル! JVM
  22. 22. © 2020 NTT DATA Corporation 22 超簡略化して考えると… ❌ 「実行中」に 機械語へコンパイル! 「実行前」に 機械語へコンパイル!
  23. 23. © 2020 NTT DATA Corporation 23 同じようなことを やっているように 見えませんか?
  24. 24. © 2020 NTT DATA Corporation 24 (追加スライド) 2つのコンパイラの処理は 重なる部分があったため、 このJITコンパイラを元にして ネイティブイメージ生成機能を 作ることができた
  25. 25. © 2020 NTT DATA Corporation 25 JITコンパイラが Javaで書かれていると
  26. 26. © 2020 NTT DATA Corporation 26 JITコンパイラの Javaコードも JITコンパイルする 必要がある
  27. 27. © 2020 NTT DATA Corporation 27 つまり アプリケーション起動時に その分の時間がかかる
  28. 28. © 2020 NTT DATA Corporation 28 JITコンパイラの コードをAOTコンパイル (ネイティブコンパイル) してしまえば ある程度解決できる
  29. 29. © 2020 NTT DATA Corporation 29 JITコンパイラコードのコンパイル JavaでJITコンパイラを書く ↓ そうなるとJITコンパイラのJavaコードを JITコンパイルすることが必要 ↓ あらかじめJITコンパイラのJavaコードを ネイティブコンパイルしておく (libgraal/libjvmcicompiler)
  30. 30. © 2020 NTT DATA Corporation 30 次にJavaに置き換える ものも同じようにする
  31. 31. © 2020 NTT DATA Corporation 31 JVMとGraalVMは 互いに影響を 及ぼし合っている
  32. 32. © 2020 NTT DATA Corporation 32 ネイティブコンパイルを採用するトレードオフ • 事前にコンパイルしたものを使うので、 利用できない機能が出てくる • コードのinstrumentation • 動的な再最適化 • 性能のトレードオフ https://twitter.com/thomaswue/status/1145603781108928513
  33. 33. © 2020 NTT DATA Corporation 33 Project Metropolisの現在 • 現在:Java 15ベースのEAビルドがある • https://jdk.java.net/metropolis/ • GraalVM JITコンパイラがデフォルトコンパイラ • ネイティブコンパイル済み • 次にどのコンポーネントがJava on Javaとなるのかは明らかでない • たとえばGCは難しいだろうと言われている
  34. 34. © 2020 NTT DATA Corporation 34 今後想定される前提作業 • Java on Javaするにはその機能のコンポーネントの JVM内でインタフェースを定義、整備する • 例:JITコンパイラの場合 • JEP 243: Java-Level JVM Compiler Interface
  35. 35. © 2020 NTT DATA Corporation 35 まとめ • Project Metropolis • Java on JavaでJVMを再実装していく! • GraalVM JITコンパイラを足がかりにしていく!
  36. 36. © 2020 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です

×