SlideShare a Scribd company logo
1 of 36
© 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
の研究開発とそのサポート業に従事しています
• Javaチャンピオン
• OpenJDK Author
jyukutyo
© 2020 NTT DATA Corporation 3
JVMは
25年間にわたり
進化してきた
© 2020 NTT DATA Corporation 4
これまでのJVMの進化
• Javaは遅い、おもちゃだ(という初期の評価)
• 大きな機能にも多くの変更があった
• JITコンパイル
• そもそも最初はJITコンパイルがなかった
• -client/-server から階層型コンパイルへ
• GCアルゴリズム
• CMSに至っては1.4で追加され、14で削除された
• 最近でもShenandoah、ZGCを追加した
• バイトコード命令の数は1つしか増えていない
• invokedynamic
© 2020 NTT DATA Corporation 5
Javaの研究ロードマップ
Java 15
リリース
現在 近い未来
• Project Valhalla
• Inline Typesで
バイトコードも追加
• Project Loom
• 仮想スレッドを追加
• Project Panama
• JVMとネイティブコード
の相互運用改善
さらに未来
???
© 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++自体も新バージョンが当然出る
3. OpenJDK開発者の労力削減と門戸を広げられる
• スキルとしてJavaとC++の両方が必要だった
4. 新ハードウェア対応や新バイトコード導入といった機能追加の
速度を向上できる
Call for Discussion: New Project: Metropolis https://cr.openjdk.java.net/~jrose/metropolis/Metropolis-Proposal.html
© 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
© 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++
GraalVM
Compiler
Interface
GraalC1
HotSpot VM
JVMCI
Java
© 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
© 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コンパイラのJavaコードを
ネイティブコンパイルしておく
(libgraal/libjvmcicompiler)
© 2020 NTT DATA Corporation 30
次にJavaに置き換える
ものも同じようにする
© 2020 NTT DATA Corporation 31
JVMとGraalVMは
互いに影響を
及ぼし合っている
© 2020 NTT DATA Corporation 32
ネイティブコンパイルを採用するトレードオフ
• 事前にコンパイルしたものを使うので、
利用できない機能が出てくる
• コードのinstrumentation
• 動的な再最適化
• 性能のトレードオフ
https://twitter.com/thomaswue/status/1145603781108928513
© 2020 NTT DATA Corporation 33
Project Metropolisの現在
• 現在:Java 15ベースのEAビルドがある
• https://jdk.java.net/metropolis/
• GraalVM JITコンパイラがデフォルトコンパイラ
• ネイティブコンパイル済み
• 次にどのコンポーネントがJava on Javaとなるのかは明らかでない
• たとえばGCは難しいだろうと言われている
© 2020 NTT DATA Corporation 34
今後想定される前提作業
• Java on Javaするにはその機能のコンポーネントの
JVM内でインタフェースを定義、整備する
• 例:JITコンパイラの場合
• JEP 243: Java-Level JVM Compiler Interface
© 2020 NTT DATA Corporation 35
まとめ
• Project Metropolis
• Java on JavaでJVMを再実装していく!
• GraalVM JITコンパイラを足がかりにしていく!
© 2020 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です

More Related Content

More from NTT DATA Technology & Innovation

pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...NTT DATA Technology & Innovation
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)NTT DATA Technology & Innovation
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...NTT DATA Technology & Innovation
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)NTT DATA Technology & Innovation
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)NTT DATA Technology & Innovation
 
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)NTT DATA Technology & Innovation
 
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...NTT DATA Technology & Innovation
 
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)NTT DATA Technology & Innovation
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)NTT DATA Technology & Innovation
 

More from NTT DATA Technology & Innovation (20)

pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PGCon 2023 参加報告(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
どうする計画駆動型スクラム(スクラムフェス大阪2023 発表資料)
 
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
 
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
 
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)
明日から始める! ソフトウェアのグリーン化(GSF MeetUp Tokyo 発表資料)
 

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

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