Movatterモバイル変換
[0]
ホーム
URL:
画像なし
夜間モード
Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
NI
Uploaded by
NTT DATA Technology & Innovation
3,552 views
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(2020年11⽉7⽇ JJUG CCC 2020 Fall 講演資料)NTTデータ 技術開発本部先進コンピューティング技術センタ阪⽥ 浩⼀
Technology
◦
Read more
3
Save
Share
Embed
Embed presentation
1
/ 84
2
/ 84
3
/ 84
4
/ 84
5
/ 84
6
/ 84
7
/ 84
8
/ 84
9
/ 84
10
/ 84
11
/ 84
12
/ 84
13
/ 84
14
/ 84
Most read
15
/ 84
16
/ 84
17
/ 84
18
/ 84
19
/ 84
20
/ 84
21
/ 84
22
/ 84
23
/ 84
24
/ 84
25
/ 84
26
/ 84
27
/ 84
28
/ 84
29
/ 84
30
/ 84
31
/ 84
32
/ 84
33
/ 84
34
/ 84
35
/ 84
36
/ 84
37
/ 84
38
/ 84
39
/ 84
40
/ 84
41
/ 84
42
/ 84
43
/ 84
44
/ 84
45
/ 84
46
/ 84
47
/ 84
48
/ 84
49
/ 84
50
/ 84
51
/ 84
52
/ 84
53
/ 84
54
/ 84
55
/ 84
56
/ 84
57
/ 84
58
/ 84
59
/ 84
60
/ 84
61
/ 84
62
/ 84
63
/ 84
64
/ 84
65
/ 84
66
/ 84
67
/ 84
Most read
68
/ 84
69
/ 84
70
/ 84
71
/ 84
Most read
72
/ 84
73
/ 84
74
/ 84
75
/ 84
76
/ 84
77
/ 84
78
/ 84
79
/ 84
80
/ 84
81
/ 84
82
/ 84
83
/ 84
84
/ 84
Recommended
PPTX
Metaspace
by
Yasumasa Suenaga
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
by
Yahoo!デベロッパーネットワーク
PPTX
イベント・ソーシングを知る
by
Shuhei Fujita
PPTX
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
PDF
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
by
NTT DATA Technology & Innovation
PDF
ゼロからはじめるKVM超入門
by
VirtualTech Japan Inc.
PDF
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
PPTX
Dockerからcontainerdへの移行
by
Akihiro Suda
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
PDF
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
by
Preferred Networks
PPT
Glibc malloc internal
by
Motohiro KOSAKI
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
by
NTT DATA Technology & Innovation
PDF
Pythonによる黒魔術入門
by
大樹 小倉
PDF
Unified JVM Logging
by
Yuji Kubota
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PPTX
Redisの特徴と活用方法について
by
Yuji Otani
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
by
NTT DATA OSS Professional Services
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
by
Preferred Networks
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
PDF
SAT/SMTソルバの仕組み
by
Masahiro Sakai
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
PDF
20分でわかるgVisor入門
by
Shuji Yamada
PDF
例外設計における大罪
by
Takuto Wada
PDF
Kubernetesによる機械学習基盤への挑戦
by
Preferred Networks
PDF
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
by
Preferred Networks
PDF
PostgreSQLでスケールアウト
by
Masahiko Sawada
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
by
NTT DATA Technology & Innovation
PDF
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
by
Kuniyasu Suzaki
PPTX
Introduction to JIT Compiler in JVM
by
Koichi Sakata
PDF
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
by
日本Javaユーザーグループ
More Related Content
PPTX
Metaspace
by
Yasumasa Suenaga
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
by
Yahoo!デベロッパーネットワーク
PPTX
イベント・ソーシングを知る
by
Shuhei Fujita
PPTX
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
PDF
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
by
NTT DATA Technology & Innovation
PDF
ゼロからはじめるKVM超入門
by
VirtualTech Japan Inc.
PDF
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
PPTX
Dockerからcontainerdへの移行
by
Akihiro Suda
Metaspace
by
Yasumasa Suenaga
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
by
Yahoo!デベロッパーネットワーク
イベント・ソーシングを知る
by
Shuhei Fujita
本当は恐ろしい分散システムの話
by
Kumazaki Hiroki
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
by
NTT DATA Technology & Innovation
ゼロからはじめるKVM超入門
by
VirtualTech Japan Inc.
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
Dockerからcontainerdへの移行
by
Akihiro Suda
What's hot
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
PDF
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
by
Preferred Networks
PPT
Glibc malloc internal
by
Motohiro KOSAKI
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
by
NTT DATA Technology & Innovation
PDF
Pythonによる黒魔術入門
by
大樹 小倉
PDF
Unified JVM Logging
by
Yuji Kubota
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PPTX
Redisの特徴と活用方法について
by
Yuji Otani
PDF
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
by
NTT DATA OSS Professional Services
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
by
Preferred Networks
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
PDF
SAT/SMTソルバの仕組み
by
Masahiro Sakai
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
PDF
20分でわかるgVisor入門
by
Shuji Yamada
PDF
例外設計における大罪
by
Takuto Wada
PDF
Kubernetesによる機械学習基盤への挑戦
by
Preferred Networks
PDF
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
by
Preferred Networks
PDF
PostgreSQLでスケールアウト
by
Masahiko Sawada
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
by
NTT DATA Technology & Innovation
PDF
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
by
Kuniyasu Suzaki
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
Kubernete Meetup Tokyo #18 - Kubebuilder/controller-runtime 入門
by
Preferred Networks
Glibc malloc internal
by
Motohiro KOSAKI
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
by
NTT DATA Technology & Innovation
Pythonによる黒魔術入門
by
大樹 小倉
Unified JVM Logging
by
Yuji Kubota
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
Redisの特徴と活用方法について
by
Yuji Otani
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
by
NTT DATA OSS Professional Services
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
by
Preferred Networks
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
by
NTT DATA Technology & Innovation
SAT/SMTソルバの仕組み
by
Masahiro Sakai
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
by
Tokoroten Nakayama
20分でわかるgVisor入門
by
Shuji Yamada
例外設計における大罪
by
Takuto Wada
Kubernetesによる機械学習基盤への挑戦
by
Preferred Networks
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
by
Preferred Networks
PostgreSQLでスケールアウト
by
Masahiko Sawada
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
by
NTT DATA Technology & Innovation
3種類のTEE比較(Intel SGX, ARM TrustZone, RISC-V Keystone)
by
Kuniyasu Suzaki
Similar to Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
PPTX
Introduction to JIT Compiler in JVM
by
Koichi Sakata
PDF
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
by
日本Javaユーザーグループ
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
by
NTT DATA Technology & Innovation
PDF
Adaptive optimization of JIT compiler
by
nothingcosmos
PDF
OpenJDK HotSpot C1Compiler Overview
by
nothingcosmos
PDF
JDKツール使ってますか
by
Chihiro Ito
PDF
JVM のいろはにほ #javajo
by
Yuji Kubota
PDF
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
by
David Buck
PDF
JIT Code Profiling with VTune
by
MITSUNARI Shigeo
PDF
Oracle code one 2018 報告会概要
by
Chihiro Ito
PPTX
Panamaを先取り!? JVMCIでJITと遊ぶ
by
Yasumasa Suenaga
PDF
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
by
David Buck
PDF
Froyo DalvikVM JIT
by
Tetsuyuki Kobayashi
PPTX
Java 9で進化する診断ツール
by
Yasumasa Suenaga
PDF
20151112 kutech lecture_ishizaki_public
by
Kazuaki Ishizaki
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
by
Chihiro Ito
PDF
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
by
PE-BANK
PDF
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
by
NTT DATA Technology & Innovation
KEY
関ジャバ JavaOne Tokyo 2012報告会
by
Koichi Sakata
PPTX
ななめ45°から見たJavaOne
by
AdvancedTechNight
Introduction to JIT Compiler in JVM
by
Koichi Sakata
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
by
日本Javaユーザーグループ
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
by
NTT DATA Technology & Innovation
Adaptive optimization of JIT compiler
by
nothingcosmos
OpenJDK HotSpot C1Compiler Overview
by
nothingcosmos
JDKツール使ってますか
by
Chihiro Ito
JVM のいろはにほ #javajo
by
Yuji Kubota
Java SE 8におけるHotSpotの進化 [Java Day Tokyo 2014 C-2]
by
David Buck
JIT Code Profiling with VTune
by
MITSUNARI Shigeo
Oracle code one 2018 報告会概要
by
Chihiro Ito
Panamaを先取り!? JVMCIでJITと遊ぶ
by
Yasumasa Suenaga
Ahead-of-Time Compilation with JDK 9 [Java Day Tokyo 2017 D1-A1]
by
David Buck
Froyo DalvikVM JIT
by
Tetsuyuki Kobayashi
Java 9で進化する診断ツール
by
Yasumasa Suenaga
20151112 kutech lecture_ishizaki_public
by
Kazuaki Ishizaki
Javaはどのように動くのか~スライドでわかるJVMの仕組み
by
Chihiro Ito
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
by
PE-BANK
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
by
NTT DATA Technology & Innovation
関ジャバ JavaOne Tokyo 2012報告会
by
Koichi Sakata
ななめ45°から見たJavaOne
by
AdvancedTechNight
More from NTT DATA Technology & Innovation
PDF
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
SAFe実践から見えた、フレームワークより大切な組織変革の道程(Scrum Fest Sendai 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
by
NTT DATA Technology & Innovation
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
2025年現在のNewSQL (最強DB講義 #36 発表資料)
by
NTT DATA Technology & Innovation
PDF
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
by
NTT DATA Technology & Innovation
PDF
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
by
NTT DATA Technology & Innovation
PDF
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
by
NTT DATA Technology & Innovation
PDF
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
by
NTT DATA Technology & Innovation
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
by
NTT DATA Technology & Innovation
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
by
NTT DATA Technology & Innovation
PDF
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
by
NTT DATA Technology & Innovation
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
by
NTT DATA Technology & Innovation
基礎から学ぶ PostgreSQL の性能監視 (PostgreSQL Conference Japan 2025 発表資料)
by
NTT DATA Technology & Innovation
SAFe実践から見えた、フレームワークより大切な組織変革の道程(Scrum Fest Sendai 2025 発表資料)
by
NTT DATA Technology & Innovation
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
by
NTT DATA Technology & Innovation
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
by
NTT DATA Technology & Innovation
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
by
NTT DATA Technology & Innovation
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
by
NTT DATA Technology & Innovation
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
by
NTT DATA Technology & Innovation
2025年現在のNewSQL (最強DB講義 #36 発表資料)
by
NTT DATA Technology & Innovation
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
by
NTT DATA Technology & Innovation
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
by
NTT DATA Technology & Innovation
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
by
NTT DATA Technology & Innovation
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
by
NTT DATA Technology & Innovation
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
by
NTT DATA Technology & Innovation
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
by
NTT DATA Technology & Innovation
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
by
NTT DATA Technology & Innovation
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
by
NTT DATA Technology & Innovation
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
by
NTT DATA Technology & Innovation
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
1.
© 2020 NTT
DATA CorporationJavaコードが速く実⾏される秘密- JITコンパイラ⼊⾨2020年11⽉7⽇ JJUG CCC 2020 Fall株式会社NTTデータ 技術開発本部阪⽥ 浩⼀
2.
© 2020 NTT
DATA Corporation 2⾃⼰紹介• 阪⽥ 浩⼀(さかた -)• 通称 じゅくちょー• JVMになりたい⼈• NTTデータでJava/OpenJDK + GraalVMの研究開発とそのサポート業に従事しています• Javaチャンピオン• OpenJDK Authorjyukutyo
3.
© 2020 NTT
DATA Corporation 3このセッションの役割JVMの現在の実⾏速度を実現したJITコンパイラの仕組みを(概観として)伝える
4.
© 2020 NTT
DATA Corporation 4Javaアプリケーションの実⾏までの流れをおさらいしましょう
5.
© 2020 NTT
DATA Corporation 5javacでのコンパイルJavaコードコンパイル(javac)クラスファイル
6.
© 2020 NTT
DATA Corporation 6cafe 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...LineN756d 6265 7254 6162 6c65 0100 046d 6169 umberTable...mai6e01 0016 285b 4c6a 6176 612f 6c61 6e67 n...([Ljava/lang2f53 7472 696e 673b 2956 0100 0a53 6f75 /String;)V...Sou7263 6546 696c 6501 000f 4865 6c6c 6f57 rceFile...HelloW6f72 6c64 2e6a 6176 610c 0007 0008 0700 orld.java.......クラスファイル
7.
© 2020 NTT
DATA Corporation 7メソッドの処理をJavaバイトコードで記述する
8.
© 2020 NTT
DATA Corporation 8https://docs.oracle.com/javase/specs/jvms/se13/html/jvms-7.html
9.
© 2020 NTT
DATA Corporation 9Javaでのコンパイル(javac)実施タイミング アプリケーション実⾏前⼊⼒ Javaコード出⼒ Javaバイトコード
10.
© 2020 NTT
DATA Corporation 10$ javap -c HelloWorldclass HelloWorld {...public static void main(java.lang.String...);Code:0: getstatic #23: ldc #35: invokevirtual #48: return}javap
11.
© 2020 NTT
DATA Corporation 11JVMはクラスファイルを読み込み、アプリケーションを実⾏する
12.
© 2020 NTT
DATA Corporation 12JVMは処理をどのように実⾏する︖
13.
© 2020 NTT
DATA Corporation 13バイトコードをインタプリト、つまり逐次処理する
14.
© 2020 NTT
DATA Corporation 14今から25年前…Javaの実⾏は遅かった
15.
© 2020 NTT
DATA Corporation 15理由の1つは、すべての処理がインタプリタ実⾏だったこと
16.
© 2020 NTT
DATA Corporation 16Java (J2SE) 1.3でJITコンパイルを標準で使うように
17.
© 2020 NTT
DATA Corporation 17このJITコンパイルが今でもJavaの速さの主な要因
18.
© 2020 NTT
DATA Corporation 18JITコンパイルの仕組みJavaバイトコードJITコンパイル機械語プロファイル情報
19.
© 2020 NTT
DATA Corporation 19JITコンパイル「実⾏中」に機械語へコンパイル︕JVM
20.
© 2020 NTT
DATA Corporation 20各プラットフォーム(主にCPU)の機械語を⽣成、キャッシュして実⾏する
21.
© 2020 NTT
DATA Corporation 21さらに、実⾏時の情報をプロファイリングし、それを機械語⽣成に活⽤する
22.
© 2020 NTT
DATA Corporation 22その結果、実⾏パフォーマンスが向上する
23.
© 2020 NTT
DATA Corporation 23コードをすべてJITコンパイルしているのか︖
24.
© 2020 NTT
DATA Corporation 24前提JITコンパイルはアプリケーションの実⾏中に動作するものである
25.
© 2020 NTT
DATA Corporation 25トレードオフJITコンパイル処理⾃体がリソースを消費する
26.
© 2020 NTT
DATA Corporation 26トレードオフのバランスを取るプロファイル情報からよく実⾏する処理(頻繁に呼ばれるメソッドなど)をコンパイル対象にする
27.
© 2020 NTT
DATA Corporation 27よく実⾏する処理=ホットスポット
28.
© 2020 NTT
DATA Corporation 28(おそらく今使っている) JVMHotSpot VM(OpenJDK / Oracle JDK)
29.
© 2020 NTT
DATA Corporation 29さらなるトレードオフよりよい機械語を⽣成するには、より⻑いコンパイル時間が必要となる
30.
© 2020 NTT
DATA Corporation 30さらなるトレードオフコンパイル時間短縮or速いコードの⽣成
31.
© 2020 NTT
DATA Corporation 31HotSpot VMでは2つのJITコンパイラを使う
32.
© 2020 NTT
DATA Corporation 32HotSpot VMでの2つのJITコンパイラ• C1コンパイラ• コンパイル時間が短い• それほど速くない機械語する• C2コンパイラ• 速いコードを⽣成する• コンパイル時間が⻑くなる
33.
© 2020 NTT
DATA Corporation 33メソッドに対するコンパイルと呼び出し時間のイメージC2C1コンパイル時間が⻑くても、その後の処理実⾏が⾼速になり、「元が取れる」
34.
© 2020 NTT
DATA Corporation 34Java歴が⻑い⼈向け昔、実⾏オプションで-server ってつけてましたよね︖
35.
© 2020 NTT
DATA Corporation 35HotSpot VMでの2つのJITコンパイラ• C1コンパイラ(clientコンパイラ)• コンパイル時間が短い• それほど速くない機械語する• C2コンパイラ(serverコンパイラ)• 速いコードを⽣成する• コンパイル時間が⻑くなる
36.
© 2020 NTT
DATA Corporation 36-server とは、C2コンパイラを使⽤する、という意味です
37.
© 2020 NTT
DATA Corporation 37Java 8からは-server不要Tiered Compilation(階層型コンパイル)がデフォルトになったため
38.
© 2020 NTT
DATA Corporation 38バイトコード C1⽣成機械語 C2⽣成機械語Tiered Compilation概要• C1とC2の両⽅を使う
39.
© 2020 NTT
DATA Corporation 39JITコンパイルのログを出⼒してみよう︕
40.
© 2020 NTT
DATA Corporation 40JITコンパイルのログ設定• 以下のオプションを付ける• -XX:+PrintCompilation• コンソールにコンパイルログを出⼒する
41.
© 2020 NTT
DATA Corporation 41PrintCompilationの出⼒181 416 4 java.lang.AbstractStringBuilder::append (45 bytes)182 417 ! 3 java.util.zip.InflaterInputStream::read (138 bytes)182 420 n 0 java.util.zip.Inflater::inflateBytesBytes (native)182 418 3 java.util.zip.InflaterInputStream::ensureOpen (18 bytes)182 419 3 java.io.RandomAccessFile::seek (22 bytes)183 421 3 java.util.WeakHashMap::getTable (9 bytes)183 422 ! 3 java.util.WeakHashMap::expungeStaleEntries (139 bytes)184 423 3 java.util.WeakHashMap::indexFor (6 bytes)184 424 3 java.io.File::isInvalid (48 bytes)184 427 3 java.util.zip.ZipUtils::CENSIZ (9 bytes)184 428 3 java.io.UnixFileSystem::normalize (41 bytes)185 429 3 java.util.zip.ZipFile::ensureOpen (40 bytes)185 425 1 java.nio.HeapByteBuffer::isDirect (2 bytes)185 431 s 3 jdk.internal.loader.Resource::cachedInputStream (20 bytes)
42.
© 2020 NTT
DATA Corporation 42デモSpringBoot起動でのJITコンパイルログ出⼒
43.
© 2020 NTT
DATA Corporation 43実際のJITコンパイルログ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最適化レベル 破棄したコンパイルしたメソッドのバイト数
44.
© 2020 NTT
DATA Corporation 44JITコンパイルの最適化レベル最適化レベル: 0インタプリタ⼀般的ケースプロファイリングなしベーシックカウンタのみ詳細3 4C2が詰まっているケース 0 2 43効果が薄いメソッドのケース0 1 3C1コンパイラ C2
45.
© 2020 NTT
DATA Corporation 45JITコンパイラの最適化レベル0 インタプリタ実⾏1 C1 (プロファイリングなし)2C1 (ベーシックカウンタのみプロファイリング)3 C1 (完全なプロファイリング)4 C2
46.
© 2020 NTT
DATA Corporation 46$ javap -c --module java.base java.lang.String...byte coder();Code:0: getstatic3: ifeq6: aload_07: getfield10: goto13: iconst_114: ireturnメソッドのバイト数String#coder()は15バイトのメソッド︕
47.
© 2020 NTT
DATA Corporation 47再掲︓実際のJITコンパイルログ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最適化レベル 破棄したコンパイルしたメソッドのバイト数
48.
© 2020 NTT
DATA Corporation 48JITコンパイルのログ設定• 以下のオプションを付ける• -XX:+PrintCompilation• コンソールにコンパイルログを出⼒する• Unified JVM Loggingでも出⼒できます• -Xlog:jit+compilation=debug
49.
© 2020 NTT
DATA Corporation 49JITコンパイラがコンパイルしたメソッドはわかったけど⽣成した機械語も⾒たい︕
50.
© 2020 NTT
DATA Corporation 50たとえばこういったケース• あるメソッドがJITコンパイルされているか確認したい• パフォーマンスに⼤きく影響するメソッドである場合• 実⾏中のどの時点でJITコンパイルされたかが重要な場合• オプションの変更による影響を確認する場合
51.
© 2020 NTT
DATA Corporation 51HSDIS(HotSpot Disassembler)• JIT⽣成の機械語をアセンブリに変換して出⼒するライブラリ• HotSpot VM⽤(通常のOpenJDKとOracle JDK)• OpenJDKに含まれている• src/utils/hsdis ディレクトリで⾃分でビルドする• ビルド⼿順参考︓https://www.slideshare.net/nttdata-tech/java-maximize-cpu-2019-nttdata-suenaga• HSDISをビルドし、JDKに配置する• [JAVA_HOME]/lib ディレクトリ• 以下のオプションを付けて起動する• -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly
52.
© 2020 NTT
DATA Corporation 52HSDISの出⼒Demo2.workload(I)I (Demo2.workload(int)) [0x000000010b997b20, 0x000000010b997b60] 64 bytes[Entry Point][Constants]# {method} {0x000000012709faf8} 'workload' '(I)I' in 'Demo2'# this: rsi:rsi = 'Demo2'# parm0: rdx = int# [sp+0x10] (sp of caller)0x000000010b997b20: mov 0x8(%rsi),%r10d0x000000010b997b24: shl $0x3,%r100x000000010b997b28: cmp %r10,%rax0x000000010b997b2b: jne 0x000000010b92f000 ; {runtime_call ic_miss_stub}0x000000010b997b31: nop0x000000010b997b32: nopl 0x0(%rax)0x000000010b997b39: nopl 0x0(%rax)[Verified Entry Point]0x000000010b997b40: nopl 0x0(%rax,%rax,1)0x000000010b997b45: inc %edx ;*iadd {reexecute=0 rethrow=0 return_oop=0}; - Demo2::workload@2 (line 9)0x000000010b997b47: mov %edx,%eax ;*ireturn {reexecute=0 rethrow=0 return_oop=0}
53.
© 2020 NTT
DATA Corporation 53デモSpringBoot起動時のアセンブリ表⽰
54.
© 2020 NTT
DATA Corporation 54読みやすいとは⾔えません
55.
© 2020 NTT
DATA Corporation 55出⼒するメソッドを指定できる• CompileOnlyオプションを付与する• -XX:CompileOnly=String::startsWith -XX:CompileCommand=quiet• コンパイラディレクティブを使う1. JSONファイルで対象を指定する2. -XX:+UnlockDiagnosticVMOptions -XX:CompilerDirectivesFile=directive.json[{match: "java/lang/String.*",PrintAssembly: true}]
56.
© 2020 NTT
DATA Corporation 56参考︓JITWatch• JITコンパイルログの解析と可視化ができる• https://github.com/AdoptOpenJDK/jitwatch
57.
© 2020 NTT
DATA Corporation 57Javaバイトコードを機械語にするプロセスは︖
58.
© 2020 NTT
DATA Corporation 58JITコンパイルのプロセスJavaバイトコードIR(中間表現)機械語最適化を適⽤し、IRを変更するサイクルを繰り返す① ③②
59.
© 2020 NTT
DATA Corporation 59IR(Intermediate Representation)• コードをデータ構造で表現する• JVMでは、グラフで表現している• プログラムの依存をグラフにする• 通称 IRグラフ
60.
© 2020 NTT
DATA Corporation 60例: x + y をグラフにする
61.
© 2020 NTT
DATA Corporation 61例: getX() + getY() をグラフにする
62.
© 2020 NTT
DATA Corporation 62例: メソッドの呼び出し順序を考慮⻩⾊が実⾏順序、緑⾊がデータフロー
63.
© 2020 NTT
DATA Corporation 63JVMのIRグラフを⾒てみよう(ただし、C2ではなくGraalVM JITコンパイラ)
64.
© 2020 NTT
DATA Corporation 64IdealGraphVisualizerIRグラフ可視化ツール• ただし、GraalVM JITコンパイラ⽤• -Dgraal.Dump=:1 オプションをつけて実⾏する• https://www.graalvm.org/docs/reference-manual/tools/#ideal-graph-visualizer
65.
© 2020 NTT
DATA Corporation 65参考: C2とGraalVM JITコンパイラ• C2• OpenJDKのデフォルト• C++で書かれている• GraalVM JITコンパイラ• GraalVMのデフォルト• Javaで書かれている• OpenJDKにもポートされている (10以降)• JEP 317: Experimental Java-Based JIT Compiler
66.
© 2020 NTT
DATA Corporation 66デモIRグラフをダンプしてIGVで表⽰する
67.
© 2020 NTT
DATA Corporation 67JITコンパイルでの最適化とは、このグラフに対するパターンマッチとなるイメージ
68.
© 2020 NTT
DATA Corporation 68ものすごくラフな例Aノード BノードCノードDノード DノードEノード最適化パターンにマッチ︕
69.
© 2020 NTT
DATA Corporation 69JITコンパイラの構成バイトコードフロントエンドバックエンド機械語
70.
© 2020 NTT
DATA Corporation 70フロントエンド• ハードウェアから独⽴• バイトコードからIRを⽣成する• IRに最適化をほどこす• IRは、HIRと呼ぶ• High-Level IR: ⾼⽔準中間表現
71.
© 2020 NTT
DATA Corporation 71バックエンド• ハードウェアに依存• レジスタを割り当てる• IRから機械語を⽣成する• IRはLIRと呼ぶ• Low-Level IR: 低⽔準中間⾔語
72.
© 2020 NTT
DATA Corporation 72JITコンパイルの処理の流れクラスロードバイトコードHIRHIR LIRLIR機械語コードフロントエンド バックエンドHIR⽣成最適化 レジスタ割当コード⽣成
73.
© 2020 NTT
DATA Corporation 73o.g.compiler.core.GraalCompilerpublic static <T extends CompilationResult> Tcompile(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);...}
74.
© 2020 NTT
DATA Corporation 74最適化• メソッドのインライン化• ループアンロール• デッドコード削除• ロック粗粒化 / ロック省略• エスケープ解析 (厳密には最適化ではない)• などなど多数
75.
© 2020 NTT
DATA Corporation 75ホットパスでのコンパイルノード ノードノードノードプロファイル結果から、左ルートを前提としたコードを⽣成する
76.
© 2020 NTT
DATA Corporation 76実⾏が右ルートに⾏く場合は︖ノード ノードノードノード⽣成したコードにあるトラップに⼊る
77.
© 2020 NTT
DATA Corporation 77脱最適化: Deoptimization• JITコンパイラが⽴てた前提から外れた実⾏となった場合• if – else if でまれな経路に⼊る• クラスロードでインタフェースの実装クラスが増える• 機械語の実⾏からインタプリタでの実⾏に戻る
78.
© 2020 NTT
DATA Corporation 78JITコンパイルのライフサイクルインタプリタコードキャッシュC1C2脱最適化
79.
© 2020 NTT
DATA Corporation 79コードキャッシュ• 機械語コードはCodeCache (C++オブジェクト)内に配置する• -XX:ReservedCodeCacheSize でキャッシュサイズを指定• デフォルトサイズは、240MB
80.
© 2020 NTT
DATA Corporation 80Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full.Compiler has been disabled.Java HotSpot(TM) 64-Bit Server VM warning: Try increasing thecode cache size using -XX:ReservedCodeCacheSize=CodeCache: size=2496Kb used=1980Kb max_used=1983Kb free=515Kbbounds [0x0000000103db8000, 0x0000000104028000,0x0000000104028000]total_blobs=1104 nmethods=623 adapters=288compilation: disabled (not enough contiguous free space left)コードキャッシュあふれ
81.
© 2020 NTT
DATA Corporation 81アプリケーションのパフォーマンスが低下する
82.
© 2020 NTT
DATA Corporation 82今回扱っていない話題• コンパイルキュー• OSR: On Stack Replacement• 各最適化⼿法の詳細• SSA: Static Single Assignment• レジスタ割付のアルゴリズム• Linear Scan Register Allocation
83.
© 2020 NTT
DATA Corporation 83まとめ• JITコンパイラ• バイトコードを機械語に変換する• HotSpot VMのJITコンパイラ• C1とC2でTiered Compilation• HSDIS(+JITWatch)• JIT⽣成コードを実際に⾒れる
84.
© 2020 NTT
DATA Corporation本資料に記載されている会社名、商品名、⼜はサービス名は、各社の登録商標⼜は商標です
[8]
ページ先頭
©2009-2025
Movatter.jp