SlideShare a Scribd company logo
1 of 82
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
2019年12月2日
阪田 浩一 / ヤフー株式会社
JVMのJITコンパイラに
ダイブする
#kanjava
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
自己紹介
2
• 阪田 浩一 (@jyukutyo)
• ヤフー株式会社 大阪拠点所属
• 第9代黒帯〜プログラミング言語(Java)〜
• JVMがとてつもなく好き
• 関西Javaエンジニアの会 代表&創設者
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
このセッションの役割
3
JVMでの
JITコンパイラの
役割、仕組みを
知る
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Javaアプリケーションの
実行までの流れを
おさらいしましょう
4
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
コンパイル
5
Javaコード
• コンパイル(javac)
クラスファイル
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
cafe babe 0000 0034 001d 0a00 0600 0f09 .......4........
0010 0011 0800 120a 0013 0014 0700 1507 ................
0016 0100 063c 696e 6974 3e01 0003 2829 .....<init>...()
5601 0004 436f 6465 0100 0f4c 696e 654e V...Code...LineN
756d 6265 7254 6162 6c65 0100 046d 6169 umberTable...mai
6e01 0016 285b 4c6a 6176 612f 6c61 6e67 n...([Ljava/lang
2f53 7472 696e 673b 2956 0100 0a53 6f75 /String;)V...Sou
7263 6546 696c 6501 000f 4865 6c6c 6f57 rceFile...HelloW
6f72 6c64 2e6a 6176 610c 0007 0008 0700 orld.java.......
クラスファイル
6
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
処理は、
Javaバイトコードで
表現する
7
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
8https://docs.oracle.com/javase/specs/jvms/se13/html/jvms-7.html
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Javaでのコンパイル(javac)
9
実施タイミング アプリケーション実行前
入力 Javaコード
出力 Javaバイトコード
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
$ javap -c HelloWorld
class HelloWorld {
...
public static void main(java.lang.String...);
Code:
0: getstatic #2
3: ldc #3
5: invokevirtual #4
8: return
}
javap
10
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JVMは、
クラスファイルを
読み込み、
アプリケーションを
実行する
11
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JVMは、
処理をどのように
実行する?
12
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
バイトコードを
インタプリト、
つまり逐次処理する
13
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
今から20年以上前…
Javaの実行は、
非常に遅かった
14
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
その理由の1つは、
すべての処理が
インタプリタ実行
だったこと
15
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Java (J2SE) 1.3で
JITコンパイルを
標準で使うように
16
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
このJITコンパイルが
今でもJavaの速さの
主な要因
17
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JITコンパイル
18
Javaバイトコード
• JITコンパイル
機械語
プロファイル情報
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JITコンパイル
19
実施タイミング アプリケーション実行中
入力
Javaバイトコード
+ プロファイル情報
出力 機械語
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
各プラットフォーム
(主にCPU)
の機械語を
生成、キャッシュして
実行する
20
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
さらに、
実行時の情報を
プロファイリングし、
それを機械語生成に
活用する
21
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
結果、
実行パフォーマンスが
向上する
22
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
では全コードを
機械語にしている?
23
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
トレードオフ
24
JITコンパイルの
処理自体を
アプリケーション実行中に
することに注意
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
トレードオフ
25
JITコンパイル処理自体が
リソースを消費する
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
プロファイル情報から
よく実行する処理
(頻繁に呼ばれる
メソッドなど)
をコンパイル対象にする
26
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
よく実行する処理
=
ホットスポット
27
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
(おそらく今使っている) JVM
28
HotSpot VM
(OpenJDK / Oracle JDK)
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
さらなるトレードオフ
29
よりよい機械語を
生成するには、
より長いコンパイル時間が
必要となる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
さらなるトレードオフ
30
コンパイル時間短縮
or
速いコードの生成
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
さらなるトレードオフ
31
• コンパイル時間を短縮すると
• それほど速くない機械語する
• 速いコードを生成するようにすると
• コンパイル時間が長くなる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
HotSpot VMでは
32
2つのJITコンパイラを
使う
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
HotSpot VMでの2つのJITコンパイラ
33
• C1コンパイラ
• コンパイル時間が短い
• それほど速くない機械語する
• C2コンパイラ
• 速いコードを生成する
• コンパイル時間が長くなる
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Java歴が長い人向け
34
昔、Javaを実行する際に
-server って
つけてましたよね?
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
HotSpot VMでの2つのJITコンパイラ
35
• C1コンパイラ (client)
• C2コンパイラ (server)
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
-server とは、
C2コンパイラを
使用する、
という意味です
36
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Java 8からは、
この指定は不要
37
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Java 8から
Tiered Compilation
(階層型コンパイル)
がデフォルトに
なったため
38
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Tiered Compilation概要
39
• C1とC2の両方を使う
バイトコード C1生成機械語 C2生成機械語
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
デモ
40
単純な時間計測
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Tiered Compilation詳細
41
C1
最適化レベル: 0
インタプリタ
一般的ケース
プロファイリング
なし
ベーシック
カウンタのみ
詳細
3 4
C2が詰まっているケース 0 2
C2
43
効果が薄いメソッドの
ケース
0 1 3
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
最適化レベル
42
0 インタプリタ実行
1 C1 (プロファイリングなし)
2
C1 (ベーシックカウンタのみ
プロファイリング)
3 C1 (完全なプロファイリング)
4 C2
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
デモ
43
JITコンパイル
実行対象を
出力する
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
-XX:+PrintCompilation
44
32 5 3 java.lang.String::coder (15 bytes)
...
150 235 4 java.lang.String::coder (15 bytes)
151 5 3 java.lang.String::coder (15 bytes) made not entrant
経過時間
コンパイルID
最適化レベル 破棄した
コンパイルした
メソッドのバイト数
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
$ javap -c --module java.base java.lang.String
...
byte coder();
Code:
0: getstatic #9 // Field COMPACT_STRINGS:Z
3: ifeq 13
6: aload_0
7: getfield #4 // Field coder:B
10: goto 14
13: iconst_1
14: ireturn
メソッドのバイト数
45
0始まりで15バイト
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
デモ
46
メソッドの行数を
少なくする、
という意味は…
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JITコンパイラが
生成コードを
見たい!
47
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
HSDIS
48
• HotSpot Disassembler
• JIT生成コードをアセンブリにする
• -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly
もつける
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
デモ
49
JITコンパイラが
生成したコードを
アセンブラコードに
して見る
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
参考: HSDISの入手
50
1. OpenJDKのソースを取得する
2. hotspot/src/share/tools/hsdis ディレクトリへ
3. binutilsをここにダウンロードする
4. ビルドする
• make BINUTILS=binutils-X.XX ARCH=amd64
5. macOSの場合、hsdis-amd64.dylibをJDKに配
置する
• $JAVA_HOME/lib/server
• $JAVA_HOME/jre/lib (JDK 8まで)
https://www.sakatakoichi.com/entry/2016/06/01/180742
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
これで見るのは、
けっこう辛い…
51
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JITWatch
52
• JITコンパイルログの解析ツール
• https://github.com/AdoptOpenJDK/jitwatch
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
デモ
53
JITWatch
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
では、
どのように
Javaバイトコードを
機械語にするのか?
54
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JITコンパイルのプロセス
55
Java
バイトコード
IR (中間表現) 機械語
最適化を適用し、
IRを変更する
① ③
②
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
IR
56
• コードをデータ構造で表現する
• JVMでは、グラフで表現する
• プログラムの依存をグラフにする
• IRグラフ
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
例: x + y をグラフにする
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
例: getX() + getY() をグラフにする
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
例: メソッドの呼び出し順序を考慮
黄色が実行順序、緑色がデータフロー
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JITコンパイルでの
最適化とは、
このグラフに対する
パターンマッチとなる
60
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ものすごくラフな例
61
Aノード Bノード
Cノード
Dノード Dノード
Eノード
最適化パターンにマッチ!
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JVMのIRグラフを
見てみよう
(ただし、C2ではなく
GraalVM JITコンパイラ)
62
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
デモ
63
IdealGraph
Visualizer
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
IdealGraphVisualizer
64
• IRグラフ可視化ツール
• ただし、GraalVM JITコンパイラ用
• -Dgraal.Dump=:1 オプションをつけて実行する
• https://www.graalvm.org/docs/reference-manual/tools/#ideal-graph-visualizer
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
参考: C2とGraalVM JITコンパイラ
65
• C2
• OpenJDKのデフォルト
• C++で書かれている
• GraalVM JITコンパイラ
• GraalVMのデフォルト
• Javaで書かれている
• OpenJDKにも入っている (10以降)
• JEP 317: Experimental Java-Based JIT Compiler
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JITコンパイラのアーキテクチャ
66
フロントエンド バックエンド
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
フロントエンド
67
• ハードウェアからは独立
• バイトコードからIRを生成する
• IRに最適化をほどこす
• IRは、HIRと呼ぶ
• High-Level IR: 高水準中間表現
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
バックエンド
68
• ハードウェアに依存
• レジスタを割り当てる
• LIRから機械語を生成する
• Low-Level IR: 低水準中間言語
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JITコンパイラのアーキテクチャ
69
クラス
ロード
バイト
コード HIR
HIR LIR
LIR
機械語
コード
フロントエンド バックエンド
HIR生成
最適化 レジスタ割当
コード生成
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
org.graalvm.compiler.core.GraalCompiler
70
public static <T extends CompilationResult> T
compile(Request<T> r) {
...
emitFrontEnd(r.providers, r.backend, r.graph,
r.graphBuilderSuite, r.optimisticOpts,
r.profilingInfo, r.suites);
r.backend.emitBackEnd(r.graph, null,
r.installedCodeOwner, r.compilationResult,
r.factory, null, r.lirSuites);
...
}
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
最適化
71
• メソッドのインライン化
• ループアンロール
• デッドコード削除
• ロック粗粒化 / ロック省略
• エスケープ解析 (厳密には最適化ではない)
• など多数
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
デモ
72
JITWatchで
最適化を見る
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
ホットパスでのコンパイル
73
ノード ノード
ノード
ノード
プロファイル結果から、
左ルートを前提とした
コードを生成する
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
実行が右ルートに行く場合は?
74
ノード ノード
ノード
ノード
生成したコードにある
トラップに入る
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
脱最適化: Deoptimization
75
• JITコンパイラが立てた前提から
外れた実行となった場合
• if – else ifでまれな経路に入る
• クラスロードでインタフェースの実装クラス
が増える
• 機械語の実行から
インタプリタでの実行に戻る
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
JITコンパイルのライフサイクル
76
インタプリタ
コードキャッシュ
C1
C2
脱最適化
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
コードキャッシュ
77
• 機械語コードは、
CodeCache (C++オブジェクト)内に
配置する
• -XX:ReservedCodeCacheSize で指定
• デフォルトサイズは、240MB
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is
full. Compiler has been disabled.
Java HotSpot(TM) 64-Bit Server VM warning: Try increasing
the code cache size using -XX:ReservedCodeCacheSize=
CodeCache: size=2496Kb used=1980Kb max_used=1983Kb
free=515Kb
bounds [0x0000000103db8000, 0x0000000104028000,
0x0000000104028000]
total_blobs=1104 nmethods=623 adapters=288
compilation: disabled (not enough contiguous free space
left)
コードキャッシュあふれ
78
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
アプリケーションの
パフォーマンスが
低下する
79
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
今回扱っていない話題
80
• コンパイルキュー
• OSR: On Stack Replacement
• 最適化手法の詳細
• SSA: Static Single Assignment
• レジスタ割付のアルゴリズム
• Linear Scan Register Allocation
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
まとめ
81
• JITコンパイラ
• バイトコードを機械語に変換する
• HotSpot VMのJITコンパイラ
• C1とC2でTiered Compilation
• HSDISとJITWatch
• JIT生成コードを実際に見る
Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
参考文献
82
• Java Magazine
• https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-MA15-Architect-
newland.pdf
• https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-JA14-Architect-
Evans.pdf
• Java Just-In-Timeコンパイラ
• https://www.slideshare.net/ishizaki/ppl-summer-school2004ishizaki-29661211

More Related Content

What's hot

いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門Fixstars Corporation
 
Git超入門_座学編.pdf
Git超入門_座学編.pdfGit超入門_座学編.pdf
Git超入門_座学編.pdf憲昭 村田
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例Fixstars Corporation
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~Daisuke Morishita
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活Kuninobu SaSaki
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 Yugo Shimizu
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜gree_tech
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門NVIDIA Japan
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理NTT DATA Technology & Innovation
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較NaoyaFukuda
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 

What's hot (20)

いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
Git超入門_座学編.pdf
Git超入門_座学編.pdfGit超入門_座学編.pdf
Git超入門_座学編.pdf
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
サーバサイドの並行プログラミング〜かんたんマルチスレッドプログラミング〜
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 
1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
ファイルシステム比較
ファイルシステム比較ファイルシステム比較
ファイルシステム比較
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 

Similar to Introduction to JIT Compiler in JVM

Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -Yahoo!デベロッパーネットワーク
 
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...Yahoo!デベロッパーネットワーク
 
Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019MKT-INTHEFOREST
 
ああ、素晴らしきTDD ~アプリとエンジニアの心に安寧を~
ああ、素晴らしきTDD  ~アプリとエンジニアの心に安寧を~ああ、素晴らしきTDD  ~アプリとエンジニアの心に安寧を~
ああ、素晴らしきTDD ~アプリとエンジニアの心に安寧を~Saiki Iijima
 
Dockerで始める開発環境構築
Dockerで始める開発環境構築Dockerで始める開発環境構築
Dockerで始める開発環境構築虎の穴 開発室
 
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...Yahoo!デベロッパーネットワーク
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpYuji Kubota
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)NTT DATA Technology & Innovation
 
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Atsushi Nakamura
 
Unification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsUnification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsHajimeSasanuma
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Makoto Haruyama
 
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...NTT DATA Technology & Innovation
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決オラクルエンジニア通信
 

Similar to Introduction to JIT Compiler in JVM (20)

現場のインフラエンジニアから見たヤフー #ヤフー名古屋
現場のインフラエンジニアから見たヤフー #ヤフー名古屋現場のインフラエンジニアから見たヤフー #ヤフー名古屋
現場のインフラエンジニアから見たヤフー #ヤフー名古屋
 
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
Apache Kafkaによるログ転送とパフォーマンスチューニング - Bonfire Backend #2 -
 
Multiple Dimension Spreadのご紹介
Multiple Dimension Spreadのご紹介Multiple Dimension Spreadのご紹介
Multiple Dimension Spreadのご紹介
 
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...
スキーマレスカラムナフォーマット「Yosegi」で実現する スキーマの柔軟性と処理性能を両立したログ収集システム / Hadoop / Spark Con...
 
Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019Participation report of data stax accelerate 2019
Participation report of data stax accelerate 2019
 
ああ、素晴らしきTDD ~アプリとエンジニアの心に安寧を~
ああ、素晴らしきTDD  ~アプリとエンジニアの心に安寧を~ああ、素晴らしきTDD  ~アプリとエンジニアの心に安寧を~
ああ、素晴らしきTDD ~アプリとエンジニアの心に安寧を~
 
Dockerで始める開発環境構築
Dockerで始める開発環境構築Dockerで始める開発環境構築
Dockerで始める開発環境構築
 
ヤフーにおけるHadoop Operations #tdtech
ヤフーにおけるHadoop Operations #tdtechヤフーにおけるHadoop Operations #tdtech
ヤフーにおけるHadoop Operations #tdtech
 
YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略
 
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019  #hc...
HDFSのスケーラビリティの限界を突破するためのさまざまな取り組み | Hadoop / Spark Conference Japan 2019 #hc...
 
SPAを選択した理由とその結果 ~Reactを添えて~
SPAを選択した理由とその結果 ~Reactを添えて~SPAを選択した理由とその結果 ~Reactを添えて~
SPAを選択した理由とその結果 ~Reactを添えて~
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
Visual Studio 2019で始める「WPF on .NET Core 3.0」開発
 
Unification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.jsUnification of the middle scale services by Nuxt.js
Unification of the middle scale services by Nuxt.js
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
 
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
まだプログラム手で書いて消耗してるの?~入出力例からプログラムを自動生成する技術~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019...
 
YJTC18 A-1 データセンタネットワークの取り組み
YJTC18 A-1 データセンタネットワークの取り組みYJTC18 A-1 データセンタネットワークの取り組み
YJTC18 A-1 データセンタネットワークの取り組み
 
画像認識技術のローカルサービスへの適用 #ヤフー名古屋
画像認識技術のローカルサービスへの適用 #ヤフー名古屋画像認識技術のローカルサービスへの適用 #ヤフー名古屋
画像認識技術のローカルサービスへの適用 #ヤフー名古屋
 
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
(Tech DeepDive #1) Java Flight Recorder を活用した問題解決
 

More from Koichi Sakata

Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Koichi Sakata
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Koichi Sakata
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageKoichi Sakata
 
Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVMKoichi Sakata
 
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうGraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうKoichi Sakata
 
Bytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte BuddyBytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte BuddyKoichi Sakata
 
Great Ideas in GraalVM
Great Ideas in GraalVMGreat Ideas in GraalVM
Great Ideas in GraalVMKoichi Sakata
 
Graal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerGraal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerKoichi Sakata
 
Kanjava 201804 Java News
Kanjava 201804 Java NewsKanjava 201804 Java News
Kanjava 201804 Java NewsKoichi Sakata
 
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性があるKanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性があるKoichi Sakata
 
from Java EE to Jakarta EE
from Java EE to Jakarta EEfrom Java EE to Jakarta EE
from Java EE to Jakarta EEKoichi Sakata
 
Java release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project AmberJava release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project AmberKoichi Sakata
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるKoichi Sakata
 
KANJAVA PARTY 2017 前説
KANJAVA PARTY 2017 前説KANJAVA PARTY 2017 前説
KANJAVA PARTY 2017 前説Koichi Sakata
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたKoichi Sakata
 
“Purikura” culture in Japan and our web application architecture
“Purikura” culturein Japan andour web application architecture“Purikura” culturein Japan andour web application architecture
“Purikura” culture in Japan and our web application architectureKoichi Sakata
 
デブサミ2017 Javaコミュニティ作ったら人生変わった
デブサミ2017 Javaコミュニティ作ったら人生変わったデブサミ2017 Javaコミュニティ作ったら人生変わった
デブサミ2017 Javaコミュニティ作ったら人生変わったKoichi Sakata
 
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているKoichi Sakata
 
日本からJavaOneに行こう!
日本からJavaOneに行こう!日本からJavaOneに行こう!
日本からJavaOneに行こう!Koichi Sakata
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Koichi Sakata
 

More from Koichi Sakata (20)

Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 
Introduction to GraalVM
Introduction to GraalVMIntroduction to GraalVM
Introduction to GraalVM
 
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼうGraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
 
Bytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte BuddyBytecode Manipulation with a Java Agent and Byte Buddy
Bytecode Manipulation with a Java Agent and Byte Buddy
 
Great Ideas in GraalVM
Great Ideas in GraalVMGreat Ideas in GraalVM
Great Ideas in GraalVM
 
Graal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT CompilerGraal in GraalVM - A New JIT Compiler
Graal in GraalVM - A New JIT Compiler
 
Kanjava 201804 Java News
Kanjava 201804 Java NewsKanjava 201804 Java News
Kanjava 201804 Java News
 
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性があるKanJava 201804 Career 思い込みから逃れた先には、可能性がある
KanJava 201804 Career 思い込みから逃れた先には、可能性がある
 
from Java EE to Jakarta EE
from Java EE to Jakarta EEfrom Java EE to Jakarta EE
from Java EE to Jakarta EE
 
Java release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project AmberJava release cadence has been changed and about Project Amber
Java release cadence has been changed and about Project Amber
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
KANJAVA PARTY 2017 前説
KANJAVA PARTY 2017 前説KANJAVA PARTY 2017 前説
KANJAVA PARTY 2017 前説
 
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めたJJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
 
“Purikura” culture in Japan and our web application architecture
“Purikura” culturein Japan andour web application architecture“Purikura” culturein Japan andour web application architecture
“Purikura” culture in Japan and our web application architecture
 
デブサミ2017 Javaコミュニティ作ったら人生変わった
デブサミ2017 Javaコミュニティ作ったら人生変わったデブサミ2017 Javaコミュニティ作ったら人生変わった
デブサミ2017 Javaコミュニティ作ったら人生変わった
 
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっているJJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
 
日本からJavaOneに行こう!
日本からJavaOneに行こう!日本からJavaOneに行こう!
日本からJavaOneに行こう!
 
Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今Seasar2で作った俺たちのサービスの今
Seasar2で作った俺たちのサービスの今
 

Recently uploaded

業務で生成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
 
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
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~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...博三 太田
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (8)

業務で生成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
 
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, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~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...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

Introduction to JIT Compiler in JVM

  • 1. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 2019年12月2日 阪田 浩一 / ヤフー株式会社 JVMのJITコンパイラに ダイブする #kanjava
  • 2. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 自己紹介 2 • 阪田 浩一 (@jyukutyo) • ヤフー株式会社 大阪拠点所属 • 第9代黒帯〜プログラミング言語(Java)〜 • JVMがとてつもなく好き • 関西Javaエンジニアの会 代表&創設者
  • 3. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. このセッションの役割 3 JVMでの JITコンパイラの 役割、仕組みを 知る
  • 4. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Javaアプリケーションの 実行までの流れを おさらいしましょう 4
  • 5. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. コンパイル 5 Javaコード • コンパイル(javac) クラスファイル
  • 6. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. cafe babe 0000 0034 001d 0a00 0600 0f09 .......4........ 0010 0011 0800 120a 0013 0014 0700 1507 ................ 0016 0100 063c 696e 6974 3e01 0003 2829 .....<init>...() 5601 0004 436f 6465 0100 0f4c 696e 654e V...Code...LineN 756d 6265 7254 6162 6c65 0100 046d 6169 umberTable...mai 6e01 0016 285b 4c6a 6176 612f 6c61 6e67 n...([Ljava/lang 2f53 7472 696e 673b 2956 0100 0a53 6f75 /String;)V...Sou 7263 6546 696c 6501 000f 4865 6c6c 6f57 rceFile...HelloW 6f72 6c64 2e6a 6176 610c 0007 0008 0700 orld.java....... クラスファイル 6
  • 7. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 処理は、 Javaバイトコードで 表現する 7
  • 8. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 8https://docs.oracle.com/javase/specs/jvms/se13/html/jvms-7.html
  • 9. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Javaでのコンパイル(javac) 9 実施タイミング アプリケーション実行前 入力 Javaコード 出力 Javaバイトコード
  • 10. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. $ javap -c HelloWorld class HelloWorld { ... public static void main(java.lang.String...); Code: 0: getstatic #2 3: ldc #3 5: invokevirtual #4 8: return } javap 10
  • 11. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JVMは、 クラスファイルを 読み込み、 アプリケーションを 実行する 11
  • 12. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JVMは、 処理をどのように 実行する? 12
  • 13. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. バイトコードを インタプリト、 つまり逐次処理する 13
  • 14. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 今から20年以上前… Javaの実行は、 非常に遅かった 14
  • 15. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. その理由の1つは、 すべての処理が インタプリタ実行 だったこと 15
  • 16. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Java (J2SE) 1.3で JITコンパイルを 標準で使うように 16
  • 17. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. このJITコンパイルが 今でもJavaの速さの 主な要因 17
  • 18. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JITコンパイル 18 Javaバイトコード • JITコンパイル 機械語 プロファイル情報
  • 19. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JITコンパイル 19 実施タイミング アプリケーション実行中 入力 Javaバイトコード + プロファイル情報 出力 機械語
  • 20. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 各プラットフォーム (主にCPU) の機械語を 生成、キャッシュして 実行する 20
  • 21. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. さらに、 実行時の情報を プロファイリングし、 それを機械語生成に 活用する 21
  • 22. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 結果、 実行パフォーマンスが 向上する 22
  • 23. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. では全コードを 機械語にしている? 23
  • 24. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. トレードオフ 24 JITコンパイルの 処理自体を アプリケーション実行中に することに注意
  • 25. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. トレードオフ 25 JITコンパイル処理自体が リソースを消費する
  • 26. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. プロファイル情報から よく実行する処理 (頻繁に呼ばれる メソッドなど) をコンパイル対象にする 26
  • 27. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. よく実行する処理 = ホットスポット 27
  • 28. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. (おそらく今使っている) JVM 28 HotSpot VM (OpenJDK / Oracle JDK)
  • 29. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. さらなるトレードオフ 29 よりよい機械語を 生成するには、 より長いコンパイル時間が 必要となる
  • 30. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. さらなるトレードオフ 30 コンパイル時間短縮 or 速いコードの生成
  • 31. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. さらなるトレードオフ 31 • コンパイル時間を短縮すると • それほど速くない機械語する • 速いコードを生成するようにすると • コンパイル時間が長くなる
  • 32. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. HotSpot VMでは 32 2つのJITコンパイラを 使う
  • 33. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. HotSpot VMでの2つのJITコンパイラ 33 • C1コンパイラ • コンパイル時間が短い • それほど速くない機械語する • C2コンパイラ • 速いコードを生成する • コンパイル時間が長くなる
  • 34. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Java歴が長い人向け 34 昔、Javaを実行する際に -server って つけてましたよね?
  • 35. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. HotSpot VMでの2つのJITコンパイラ 35 • C1コンパイラ (client) • C2コンパイラ (server)
  • 36. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. -server とは、 C2コンパイラを 使用する、 という意味です 36
  • 37. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Java 8からは、 この指定は不要 37
  • 38. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Java 8から Tiered Compilation (階層型コンパイル) がデフォルトに なったため 38
  • 39. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Tiered Compilation概要 39 • C1とC2の両方を使う バイトコード C1生成機械語 C2生成機械語
  • 40. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. デモ 40 単純な時間計測
  • 41. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Tiered Compilation詳細 41 C1 最適化レベル: 0 インタプリタ 一般的ケース プロファイリング なし ベーシック カウンタのみ 詳細 3 4 C2が詰まっているケース 0 2 C2 43 効果が薄いメソッドの ケース 0 1 3
  • 42. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 最適化レベル 42 0 インタプリタ実行 1 C1 (プロファイリングなし) 2 C1 (ベーシックカウンタのみ プロファイリング) 3 C1 (完全なプロファイリング) 4 C2
  • 43. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. デモ 43 JITコンパイル 実行対象を 出力する
  • 44. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. -XX:+PrintCompilation 44 32 5 3 java.lang.String::coder (15 bytes) ... 150 235 4 java.lang.String::coder (15 bytes) 151 5 3 java.lang.String::coder (15 bytes) made not entrant 経過時間 コンパイルID 最適化レベル 破棄した コンパイルした メソッドのバイト数
  • 45. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. $ javap -c --module java.base java.lang.String ... byte coder(); Code: 0: getstatic #9 // Field COMPACT_STRINGS:Z 3: ifeq 13 6: aload_0 7: getfield #4 // Field coder:B 10: goto 14 13: iconst_1 14: ireturn メソッドのバイト数 45 0始まりで15バイト
  • 46. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. デモ 46 メソッドの行数を 少なくする、 という意味は…
  • 47. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JITコンパイラが 生成コードを 見たい! 47
  • 48. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. HSDIS 48 • HotSpot Disassembler • JIT生成コードをアセンブリにする • -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly もつける
  • 49. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. デモ 49 JITコンパイラが 生成したコードを アセンブラコードに して見る
  • 50. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 参考: HSDISの入手 50 1. OpenJDKのソースを取得する 2. hotspot/src/share/tools/hsdis ディレクトリへ 3. binutilsをここにダウンロードする 4. ビルドする • make BINUTILS=binutils-X.XX ARCH=amd64 5. macOSの場合、hsdis-amd64.dylibをJDKに配 置する • $JAVA_HOME/lib/server • $JAVA_HOME/jre/lib (JDK 8まで) https://www.sakatakoichi.com/entry/2016/06/01/180742
  • 51. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. これで見るのは、 けっこう辛い… 51
  • 52. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JITWatch 52 • JITコンパイルログの解析ツール • https://github.com/AdoptOpenJDK/jitwatch
  • 53. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. デモ 53 JITWatch
  • 54. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. では、 どのように Javaバイトコードを 機械語にするのか? 54
  • 55. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JITコンパイルのプロセス 55 Java バイトコード IR (中間表現) 機械語 最適化を適用し、 IRを変更する ① ③ ②
  • 56. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. IR 56 • コードをデータ構造で表現する • JVMでは、グラフで表現する • プログラムの依存をグラフにする • IRグラフ
  • 57. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 例: x + y をグラフにする
  • 58. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 例: getX() + getY() をグラフにする
  • 59. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 例: メソッドの呼び出し順序を考慮 黄色が実行順序、緑色がデータフロー
  • 60. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JITコンパイルでの 最適化とは、 このグラフに対する パターンマッチとなる 60
  • 61. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ものすごくラフな例 61 Aノード Bノード Cノード Dノード Dノード Eノード 最適化パターンにマッチ!
  • 62. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JVMのIRグラフを 見てみよう (ただし、C2ではなく GraalVM JITコンパイラ) 62
  • 63. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. デモ 63 IdealGraph Visualizer
  • 64. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. IdealGraphVisualizer 64 • IRグラフ可視化ツール • ただし、GraalVM JITコンパイラ用 • -Dgraal.Dump=:1 オプションをつけて実行する • https://www.graalvm.org/docs/reference-manual/tools/#ideal-graph-visualizer
  • 65. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 参考: C2とGraalVM JITコンパイラ 65 • C2 • OpenJDKのデフォルト • C++で書かれている • GraalVM JITコンパイラ • GraalVMのデフォルト • Javaで書かれている • OpenJDKにも入っている (10以降) • JEP 317: Experimental Java-Based JIT Compiler
  • 66. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JITコンパイラのアーキテクチャ 66 フロントエンド バックエンド
  • 67. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. フロントエンド 67 • ハードウェアからは独立 • バイトコードからIRを生成する • IRに最適化をほどこす • IRは、HIRと呼ぶ • High-Level IR: 高水準中間表現
  • 68. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. バックエンド 68 • ハードウェアに依存 • レジスタを割り当てる • LIRから機械語を生成する • Low-Level IR: 低水準中間言語
  • 69. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JITコンパイラのアーキテクチャ 69 クラス ロード バイト コード HIR HIR LIR LIR 機械語 コード フロントエンド バックエンド HIR生成 最適化 レジスタ割当 コード生成
  • 70. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. org.graalvm.compiler.core.GraalCompiler 70 public static <T extends CompilationResult> T compile(Request<T> r) { ... emitFrontEnd(r.providers, r.backend, r.graph, r.graphBuilderSuite, r.optimisticOpts, r.profilingInfo, r.suites); r.backend.emitBackEnd(r.graph, null, r.installedCodeOwner, r.compilationResult, r.factory, null, r.lirSuites); ... }
  • 71. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 最適化 71 • メソッドのインライン化 • ループアンロール • デッドコード削除 • ロック粗粒化 / ロック省略 • エスケープ解析 (厳密には最適化ではない) • など多数
  • 72. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. デモ 72 JITWatchで 最適化を見る
  • 73. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. ホットパスでのコンパイル 73 ノード ノード ノード ノード プロファイル結果から、 左ルートを前提とした コードを生成する
  • 74. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 実行が右ルートに行く場合は? 74 ノード ノード ノード ノード 生成したコードにある トラップに入る
  • 75. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 脱最適化: Deoptimization 75 • JITコンパイラが立てた前提から 外れた実行となった場合 • if – else ifでまれな経路に入る • クラスロードでインタフェースの実装クラス が増える • 機械語の実行から インタプリタでの実行に戻る
  • 76. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. JITコンパイルのライフサイクル 76 インタプリタ コードキャッシュ C1 C2 脱最適化
  • 77. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. コードキャッシュ 77 • 機械語コードは、 CodeCache (C++オブジェクト)内に 配置する • -XX:ReservedCodeCacheSize で指定 • デフォルトサイズは、240MB
  • 78. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled. Java HotSpot(TM) 64-Bit Server VM warning: Try increasing the code cache size using -XX:ReservedCodeCacheSize= CodeCache: size=2496Kb used=1980Kb max_used=1983Kb free=515Kb bounds [0x0000000103db8000, 0x0000000104028000, 0x0000000104028000] total_blobs=1104 nmethods=623 adapters=288 compilation: disabled (not enough contiguous free space left) コードキャッシュあふれ 78
  • 79. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. アプリケーションの パフォーマンスが 低下する 79
  • 80. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 今回扱っていない話題 80 • コンパイルキュー • OSR: On Stack Replacement • 最適化手法の詳細 • SSA: Static Single Assignment • レジスタ割付のアルゴリズム • Linear Scan Register Allocation
  • 81. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. まとめ 81 • JITコンパイラ • バイトコードを機械語に変換する • HotSpot VMのJITコンパイラ • C1とC2でTiered Compilation • HSDISとJITWatch • JIT生成コードを実際に見る
  • 82. Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 参考文献 82 • Java Magazine • https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-MA15-Architect- newland.pdf • https://www.oracle.com/webfolder/technetwork/jp/javamagazine/Java-JA14-Architect- Evans.pdf • Java Just-In-Timeコンパイラ • https://www.slideshare.net/ishizaki/ppl-summer-school2004ishizaki-29661211