SlideShare a Scribd company logo
Copyright©2015 NTT corp. All Rights Reserved.
JVMのいろはにほ
久保田 祐史
日本電信電話株式会社
OSS センタ
-私はこうやってJVMが好きになった話-
2Copyright©2015 NTT corp. All Rights Reserved.
•本スライドで示されている見
解は私個人のものであり、所
属組織の見解を反映したもの
ではありません
•講義(口頭での補足)前提の資料
のため、本資料だけでは解り
辛い箇所があります
Disclaimer
3Copyright©2015 NTT corp. All Rights Reserved.
•ざっくばらんと話します
•極力、正確を期していますが、
簡易化のために(問題ない範囲で)
正確ではない部分もあります
•ここでの JVM = HotSpot VM
•いわゆる OpenJDK/Oracle JDK
•JVM 自体は他にも色々あります
注意事項
4Copyright©2015 NTT corp. All Rights Reserved.
•解らないことがあったら講師
を止めまてください
•手を挙げる
•Tweet で呼びかける(#javajo)
•よこなさんに目配せをする
注意事項 (当日)
5Copyright©2015 NTT corp. All Rights Reserved.
•自己紹介
•JVM ってなに?
•JVM の主要機能
•コードの実行
•メモリの管理
•HeapStats
目次
6Copyright©2015 NTT corp. All Rights Reserved.
•久保田 祐史 (KUBOTA Yuji)
•@sugarlife
•Java 歴 6 年?
•入社してから Java を学んだ
•約 2 年ぐらい前から OpenJDK を
読み始めた
自己紹介
7Copyright©2015 NTT corp. All Rights Reserved.
自己紹介
都内のほどほどのお値段の
スイーツ情報募集中
8Copyright©2015 NTT corp. All Rights Reserved.
•自己紹介
•JVM ってなに?
•JVM の主要機能
•コードの実行
•メモリの管理
•HeapStats コマーシャル
目次
9Copyright©2015 NTT corp. All Rights Reserved.
•JVM の出番はどこ?
•ソースコードを書く
•Duke.java
•ソースコードをコンパイルする
•javac Duke.java
•実行する
•java Duke
Java の動かし方
10Copyright©2015 NTT corp. All Rights Reserved.
•Java 仮想マシン (Virtual Machine)
•Java バイトコード の実行環境
•書いたコードがどこでも動く
JVM とは
Windows Linux OS
Windows用
JVM
Linux用
JVM
各OS用
JVM
Java バイトコード
ソースコード コンパイル(javac)
11Copyright©2015 NTT corp. All Rights Reserved.
•コードの実行
•新しい型の検索、ロード、検証
(クラスローダ)
•メソッドの要求する命令・計算
の実行
(インタプリタ、JITコンパイラ)
•メモリの管理
•コードの代わりにメモリ管理
JVM の主な機能
12Copyright©2015 NTT corp. All Rights Reserved.
JVM の機能イメージ
static void main(String.. args){
Duke duke = new Duke();
}
このメソッドを実行してあげないとダメ
このクラスを理解してあげないとダメ
これらを全部メモリ上に
配置してやらないとダメ
※実際はバイトコード等
13Copyright©2015 NTT corp. All Rights Reserved.
寄り道:JVM?JDK?JRE?
14Copyright©2015 NTT corp. All Rights Reserved.
•JDK を導入すれば OK
寄り道:JVM と JRE と JDK
JVM
クラス
ライブラリ
(rt.jar)
JRE (Java Runtime Environment)
開発ツール
( javac 等)
JDK (Java Development Tools)
最小限しか入れたくない場合は JRE だが、
トラブルシューティングに必要なツールも
入ってるので、JDK を導入したほうが良い
15Copyright©2015 NTT corp. All Rights Reserved.
•自己紹介
•JVM ってなに?
•JVM の主要機能
•コードの実行
•メモリの管理
•HeapStats
目次
16Copyright©2015 NTT corp. All Rights Reserved.
•クラスローダ
•クラスファイル (*.class) を動的
にメモリ上にロードする機能
•必要になった時にロードする
•コアクラスライブラリ等は
起動時に読み込まれる
•クラスローダは複数種類ある
•親子関係を持つ
JVM の機能:コードの実行
17Copyright©2015 NTT corp. All Rights Reserved.
•インタプリタ
•バイトコードを逐次解釈しなが
ら実行する機能
•JITコンパイラ (Just-In-Time)
•実行時に機械語へ変換して高速
化を図る機能
•実行回数が規定値を超えたメソ
ッドのみをJITコンパイルする
JVM の機能:コードの実行
18Copyright©2015 NTT corp. All Rights Reserved.
•イメージ
JVM の機能:コードの実行
クラスローダ
メモリ空間(※)
JIT コンパイラ
システム (OS)
マシン語
クラスファイル
インタプリタ
バイトコード
ソースコード
コンパイル (javac)
特定条件で
※:実際はクラスローダ等もメモリ空間に存在する
19Copyright©2015 NTT corp. All Rights Reserved.
•初心者の時点ではほぼない
•全体図をイメージできたらgood
•詳細を意識し始める時期
•NoClassDefFoundError
•該当クラスがクラスパスにあるの
に発生したら、クラスローダの仕
組みを理解すべき時期
•日本語の参考資料:IBM, @ashigeru
開発者が意識すべきポイントは?
20Copyright©2015 NTT corp. All Rights Reserved.
•詳細を意識し始める時期(続)
•ソース変えずにデバッグしたい
•バイトコードインジェクションと
いう手段がある。例:byteman
•JITコンパイル方法を知りたい
•Java Day Tokyo 2014 の資料が手
始めに良い
•知りたくなる時期はたぶん来ない
開発者が意識すべきポイントは?
21Copyright©2015 NTT corp. All Rights Reserved.
•自己紹介
•JVM ってなに?
•JVM の主要機能
•コードの実行
•メモリの管理
•HeapStats
目次
22Copyright©2015 NTT corp. All Rights Reserved.
•Java のメモリ構造
JVM の機能:メモリの管理
ヒープ
(Heap)
C ヒープ
(C heap)
Java アプリが
使うところ
主に JVM が
使うところ
非ヒープ
(Non Heap)
まとめてヒープと
呼ぶ場合もある
23Copyright©2015 NTT corp. All Rights Reserved.
ヒープ
Heap
•ヒープ
JVM の機能:メモリの管理
非ヒープ
Non Heap
24Copyright©2015 NTT corp. All Rights Reserved.
•ヒープ:世代分け (Generation)
JVM の機能:メモリの管理
Young 世代
Tenured 世代
(Old 世代)
JDK7 以前は
Permanent 世代
JDK8 以降は
世代なし
25Copyright©2015 NTT corp. All Rights Reserved.
•ヒープ:領域分け (Space)
JVM の機能:メモリの管理
Old
JDK7以前:
Permanent
JDK8以降:
Metaspace
Eden
Survivor
0
Survivor
1
Young 世代 Tenured(Old) 世代
26Copyright©2015 NTT corp. All Rights Reserved.
•なぜヒープを分けているの?
•複数の GC を利用するため
•GC = ガベージコレクション。
不要なメモリを回収する機能
•複数の GC = 世代別 GC と呼ぶ
•なぜ複数必要なの?
•可能な限りアプリケーション停
止時間を短くするための工夫
JVM の機能:メモリの管理
27Copyright©2015 NTT corp. All Rights Reserved.
•各 GC の担当範囲
JVM の機能:メモリの管理
Young 世代 Tenured(Old)世代 Non Heap
Minor GC 担当 Major GC 担当(※)
※:Javaオプションや状況によって範囲が異なります
28Copyright©2015 NTT corp. All Rights Reserved.
•メモリ周りのエラー
•早い話が OutOfMemoryError
•原因をどうやって確認するか
•メモリリーク?
•メモリ不足?
•それ以外(バグ)?
開発者が意識すべきポイントは?
29Copyright©2015 NTT corp. All Rights Reserved.
•OOME も色々ある
開発者が意識すべきポイントは?
「slideshare oome」
で検索。
http://www.slideshare.net/Yuj
iKubota/javalangoutofmemor
yerror-java
30Copyright©2015 NTT corp. All Rights Reserved.
•OutOfMemoryError:message
•ログ (message) をまず確認する
•ヒープなら、リークか不足か
•ヒープ使用量をグラフ化して確認
OOME 原因の確認方法
31Copyright©2015 NTT corp. All Rights Reserved.
•ヒープ使用量のグラフ化方法
•GC ログをGCViewer でグラフ化
•Used Heap (青線) の動きを見る
•GC ログは以下のオプションを追
加して収集する
•-Xloggc:<path_to_file>
•-XX:+PrintGCDetails
•-XX:+PrintGCDateStamps
OOME 原因の確認方法
32Copyright©2015 NTT corp. All Rights Reserved.
•Concurrent Mark-Sweep の場合
GCって?
http://www.slideshare.net/YujiKubota/concu
rrent-marksweep-garbage-collection
33Copyright©2015 NTT corp. All Rights Reserved.
•自己紹介
•JVM ってなに?
•JVM の主要機能
•コードの実行
•メモリの管理
•HeapStats
目次
34Copyright©2015 NTT corp. All Rights Reserved.
詳細は JJUG CCC 2015 Spring で!
※: #javajo では説明しました

More Related Content

JVM のいろはにほ #javajo

  • 1. Copyright©2015 NTT corp. All Rights Reserved. JVMのいろはにほ 久保田 祐史 日本電信電話株式会社 OSS センタ -私はこうやってJVMが好きになった話-
  • 2. 2Copyright©2015 NTT corp. All Rights Reserved. •本スライドで示されている見 解は私個人のものであり、所 属組織の見解を反映したもの ではありません •講義(口頭での補足)前提の資料 のため、本資料だけでは解り 辛い箇所があります Disclaimer
  • 3. 3Copyright©2015 NTT corp. All Rights Reserved. •ざっくばらんと話します •極力、正確を期していますが、 簡易化のために(問題ない範囲で) 正確ではない部分もあります •ここでの JVM = HotSpot VM •いわゆる OpenJDK/Oracle JDK •JVM 自体は他にも色々あります 注意事項
  • 4. 4Copyright©2015 NTT corp. All Rights Reserved. •解らないことがあったら講師 を止めまてください •手を挙げる •Tweet で呼びかける(#javajo) •よこなさんに目配せをする 注意事項 (当日)
  • 5. 5Copyright©2015 NTT corp. All Rights Reserved. •自己紹介 •JVM ってなに? •JVM の主要機能 •コードの実行 •メモリの管理 •HeapStats 目次
  • 6. 6Copyright©2015 NTT corp. All Rights Reserved. •久保田 祐史 (KUBOTA Yuji) •@sugarlife •Java 歴 6 年? •入社してから Java を学んだ •約 2 年ぐらい前から OpenJDK を 読み始めた 自己紹介
  • 7. 7Copyright©2015 NTT corp. All Rights Reserved. 自己紹介 都内のほどほどのお値段の スイーツ情報募集中
  • 8. 8Copyright©2015 NTT corp. All Rights Reserved. •自己紹介 •JVM ってなに? •JVM の主要機能 •コードの実行 •メモリの管理 •HeapStats コマーシャル 目次
  • 9. 9Copyright©2015 NTT corp. All Rights Reserved. •JVM の出番はどこ? •ソースコードを書く •Duke.java •ソースコードをコンパイルする •javac Duke.java •実行する •java Duke Java の動かし方
  • 10. 10Copyright©2015 NTT corp. All Rights Reserved. •Java 仮想マシン (Virtual Machine) •Java バイトコード の実行環境 •書いたコードがどこでも動く JVM とは Windows Linux OS Windows用 JVM Linux用 JVM 各OS用 JVM Java バイトコード ソースコード コンパイル(javac)
  • 11. 11Copyright©2015 NTT corp. All Rights Reserved. •コードの実行 •新しい型の検索、ロード、検証 (クラスローダ) •メソッドの要求する命令・計算 の実行 (インタプリタ、JITコンパイラ) •メモリの管理 •コードの代わりにメモリ管理 JVM の主な機能
  • 12. 12Copyright©2015 NTT corp. All Rights Reserved. JVM の機能イメージ static void main(String.. args){ Duke duke = new Duke(); } このメソッドを実行してあげないとダメ このクラスを理解してあげないとダメ これらを全部メモリ上に 配置してやらないとダメ ※実際はバイトコード等
  • 13. 13Copyright©2015 NTT corp. All Rights Reserved. 寄り道:JVM?JDK?JRE?
  • 14. 14Copyright©2015 NTT corp. All Rights Reserved. •JDK を導入すれば OK 寄り道:JVM と JRE と JDK JVM クラス ライブラリ (rt.jar) JRE (Java Runtime Environment) 開発ツール ( javac 等) JDK (Java Development Tools) 最小限しか入れたくない場合は JRE だが、 トラブルシューティングに必要なツールも 入ってるので、JDK を導入したほうが良い
  • 15. 15Copyright©2015 NTT corp. All Rights Reserved. •自己紹介 •JVM ってなに? •JVM の主要機能 •コードの実行 •メモリの管理 •HeapStats 目次
  • 16. 16Copyright©2015 NTT corp. All Rights Reserved. •クラスローダ •クラスファイル (*.class) を動的 にメモリ上にロードする機能 •必要になった時にロードする •コアクラスライブラリ等は 起動時に読み込まれる •クラスローダは複数種類ある •親子関係を持つ JVM の機能:コードの実行
  • 17. 17Copyright©2015 NTT corp. All Rights Reserved. •インタプリタ •バイトコードを逐次解釈しなが ら実行する機能 •JITコンパイラ (Just-In-Time) •実行時に機械語へ変換して高速 化を図る機能 •実行回数が規定値を超えたメソ ッドのみをJITコンパイルする JVM の機能:コードの実行
  • 18. 18Copyright©2015 NTT corp. All Rights Reserved. •イメージ JVM の機能:コードの実行 クラスローダ メモリ空間(※) JIT コンパイラ システム (OS) マシン語 クラスファイル インタプリタ バイトコード ソースコード コンパイル (javac) 特定条件で ※:実際はクラスローダ等もメモリ空間に存在する
  • 19. 19Copyright©2015 NTT corp. All Rights Reserved. •初心者の時点ではほぼない •全体図をイメージできたらgood •詳細を意識し始める時期 •NoClassDefFoundError •該当クラスがクラスパスにあるの に発生したら、クラスローダの仕 組みを理解すべき時期 •日本語の参考資料:IBM, @ashigeru 開発者が意識すべきポイントは?
  • 20. 20Copyright©2015 NTT corp. All Rights Reserved. •詳細を意識し始める時期(続) •ソース変えずにデバッグしたい •バイトコードインジェクションと いう手段がある。例:byteman •JITコンパイル方法を知りたい •Java Day Tokyo 2014 の資料が手 始めに良い •知りたくなる時期はたぶん来ない 開発者が意識すべきポイントは?
  • 21. 21Copyright©2015 NTT corp. All Rights Reserved. •自己紹介 •JVM ってなに? •JVM の主要機能 •コードの実行 •メモリの管理 •HeapStats 目次
  • 22. 22Copyright©2015 NTT corp. All Rights Reserved. •Java のメモリ構造 JVM の機能:メモリの管理 ヒープ (Heap) C ヒープ (C heap) Java アプリが 使うところ 主に JVM が 使うところ 非ヒープ (Non Heap) まとめてヒープと 呼ぶ場合もある
  • 23. 23Copyright©2015 NTT corp. All Rights Reserved. ヒープ Heap •ヒープ JVM の機能:メモリの管理 非ヒープ Non Heap
  • 24. 24Copyright©2015 NTT corp. All Rights Reserved. •ヒープ:世代分け (Generation) JVM の機能:メモリの管理 Young 世代 Tenured 世代 (Old 世代) JDK7 以前は Permanent 世代 JDK8 以降は 世代なし
  • 25. 25Copyright©2015 NTT corp. All Rights Reserved. •ヒープ:領域分け (Space) JVM の機能:メモリの管理 Old JDK7以前: Permanent JDK8以降: Metaspace Eden Survivor 0 Survivor 1 Young 世代 Tenured(Old) 世代
  • 26. 26Copyright©2015 NTT corp. All Rights Reserved. •なぜヒープを分けているの? •複数の GC を利用するため •GC = ガベージコレクション。 不要なメモリを回収する機能 •複数の GC = 世代別 GC と呼ぶ •なぜ複数必要なの? •可能な限りアプリケーション停 止時間を短くするための工夫 JVM の機能:メモリの管理
  • 27. 27Copyright©2015 NTT corp. All Rights Reserved. •各 GC の担当範囲 JVM の機能:メモリの管理 Young 世代 Tenured(Old)世代 Non Heap Minor GC 担当 Major GC 担当(※) ※:Javaオプションや状況によって範囲が異なります
  • 28. 28Copyright©2015 NTT corp. All Rights Reserved. •メモリ周りのエラー •早い話が OutOfMemoryError •原因をどうやって確認するか •メモリリーク? •メモリ不足? •それ以外(バグ)? 開発者が意識すべきポイントは?
  • 29. 29Copyright©2015 NTT corp. All Rights Reserved. •OOME も色々ある 開発者が意識すべきポイントは? 「slideshare oome」 で検索。 http://www.slideshare.net/Yuj iKubota/javalangoutofmemor yerror-java
  • 30. 30Copyright©2015 NTT corp. All Rights Reserved. •OutOfMemoryError:message •ログ (message) をまず確認する •ヒープなら、リークか不足か •ヒープ使用量をグラフ化して確認 OOME 原因の確認方法
  • 31. 31Copyright©2015 NTT corp. All Rights Reserved. •ヒープ使用量のグラフ化方法 •GC ログをGCViewer でグラフ化 •Used Heap (青線) の動きを見る •GC ログは以下のオプションを追 加して収集する •-Xloggc:<path_to_file> •-XX:+PrintGCDetails •-XX:+PrintGCDateStamps OOME 原因の確認方法
  • 32. 32Copyright©2015 NTT corp. All Rights Reserved. •Concurrent Mark-Sweep の場合 GCって? http://www.slideshare.net/YujiKubota/concu rrent-marksweep-garbage-collection
  • 33. 33Copyright©2015 NTT corp. All Rights Reserved. •自己紹介 •JVM ってなに? •JVM の主要機能 •コードの実行 •メモリの管理 •HeapStats 目次
  • 34. 34Copyright©2015 NTT corp. All Rights Reserved. 詳細は JJUG CCC 2015 Spring で! ※: #javajo では説明しました