34
Copyright©2015 NTT corp. All Rights Reserved. JVMのいろはにほ 久保田 祐史 日本電信電話株式会社 OSS センタ -私はこうやってJVMが好きになった話-

JVM のいろはにほ #javajo

Embed Size (px)

Citation preview

Page 1: JVM のいろはにほ #javajo

Copyright©2015 NTT corp. All Rights Reserved.

JVMのいろはにほ

久保田 祐史日本電信電話株式会社

OSS センタ

-私はこうやってJVMが好きになった話-

Page 2: JVM のいろはにほ #javajo

2Copyright©2015 NTT corp. All Rights Reserved.

•本スライドで示されている見解は私個人のものであり、所属組織の見解を反映したものではありません

•講義(口頭での補足)前提の資料のため、本資料だけでは解り辛い箇所があります

Disclaimer

Page 3: JVM のいろはにほ #javajo

3Copyright©2015 NTT corp. All Rights Reserved.

•ざっくばらんと話します

•極力、正確を期していますが、簡易化のために(問題ない範囲で)

正確ではない部分もあります

•ここでの JVM = HotSpot VM

•いわゆる OpenJDK/Oracle JDK

•JVM 自体は他にも色々あります

注意事項

Page 4: JVM のいろはにほ #javajo

4Copyright©2015 NTT corp. All Rights Reserved.

•解らないことがあったら講師を止めまてください

•手を挙げる

•Tweet で呼びかける(#javajo)

•よこなさんに目配せをする

注意事項 (当日)

Page 5: JVM のいろはにほ #javajo

5Copyright©2015 NTT corp. All Rights Reserved.

•自己紹介

•JVM ってなに?

•JVM の主要機能

•コードの実行

•メモリの管理

•HeapStats

目次

Page 6: JVM のいろはにほ #javajo

6Copyright©2015 NTT corp. All Rights Reserved.

•久保田 祐史 (KUBOTA Yuji)

•@sugarlife

•Java 歴 6 年?

•入社してから Java を学んだ

•約 2 年ぐらい前から OpenJDK を読み始めた

自己紹介

Page 7: JVM のいろはにほ #javajo

7Copyright©2015 NTT corp. All Rights Reserved.

自己紹介

都内のほどほどのお値段のスイーツ情報募集中

Page 8: JVM のいろはにほ #javajo

8Copyright©2015 NTT corp. All Rights Reserved.

•自己紹介

•JVM ってなに?

•JVM の主要機能

•コードの実行

•メモリの管理

•HeapStats コマーシャル

目次

Page 9: JVM のいろはにほ #javajo

9Copyright©2015 NTT corp. All Rights Reserved.

•JVM の出番はどこ?

•ソースコードを書く

•Duke.java

•ソースコードをコンパイルする

•javac Duke.java

•実行する

•java Duke

Java の動かし方

Page 10: JVM のいろはにほ #javajo

10Copyright©2015 NTT corp. All Rights Reserved.

•Java 仮想マシン (Virtual Machine)

•Java バイトコード の実行環境

•書いたコードがどこでも動く

JVM とは

Windows Linux OS

Windows用JVM

Linux用JVM

各OS用JVM

Java バイトコード

ソースコード コンパイル(javac)

Page 11: JVM のいろはにほ #javajo

11Copyright©2015 NTT corp. All Rights Reserved.

•コードの実行•新しい型の検索、ロード、検証(クラスローダ)

•メソッドの要求する命令・計算の実行(インタプリタ、JITコンパイラ)

•メモリの管理•コードの代わりにメモリ管理

JVM の主な機能

Page 12: JVM のいろはにほ #javajo

12Copyright©2015 NTT corp. All Rights Reserved.

JVM の機能イメージ

static void main(String.. args){ Duke duke = new Duke();

}

このメソッドを実行してあげないとダメ

このクラスを理解してあげないとダメ

これらを全部メモリ上に配置してやらないとダメ

※実際はバイトコード等

Page 13: JVM のいろはにほ #javajo

13Copyright©2015 NTT corp. All Rights Reserved.

寄り道:JVM?JDK?JRE?

Page 14: JVM のいろはにほ #javajo

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 を導入したほうが良い

Page 15: JVM のいろはにほ #javajo

15Copyright©2015 NTT corp. All Rights Reserved.

•自己紹介

•JVM ってなに?

•JVM の主要機能

•コードの実行

•メモリの管理

•HeapStats

目次

Page 16: JVM のいろはにほ #javajo

16Copyright©2015 NTT corp. All Rights Reserved.

•クラスローダ

•クラスファイル (*.class) を動的にメモリ上にロードする機能

•必要になった時にロードする

•コアクラスライブラリ等は起動時に読み込まれる

•クラスローダは複数種類ある

•親子関係を持つ

JVM の機能:コードの実行

Page 17: JVM のいろはにほ #javajo

17Copyright©2015 NTT corp. All Rights Reserved.

•インタプリタ•バイトコードを逐次解釈しながら実行する機能

•JITコンパイラ (Just-In-Time)

•実行時に機械語へ変換して高速化を図る機能

•実行回数が規定値を超えたメソッドのみをJITコンパイルする

JVM の機能:コードの実行

Page 18: JVM のいろはにほ #javajo

18Copyright©2015 NTT corp. All Rights Reserved.

•イメージ

JVM の機能:コードの実行

クラスローダ

メモリ空間(※)

JIT コンパイラ

システム (OS)

マシン語

クラスファイル

インタプリタ

バイトコード

ソースコード

コンパイル (javac)

特定条件で

※:実際はクラスローダ等もメモリ空間に存在する

Page 19: JVM のいろはにほ #javajo

19Copyright©2015 NTT corp. All Rights Reserved.

•初心者の時点ではほぼない

•全体図をイメージできたらgood

•詳細を意識し始める時期

•NoClassDefFoundError

•該当クラスがクラスパスにあるのに発生したら、クラスローダの仕組みを理解すべき時期

•日本語の参考資料:IBM, @ashigeru

開発者が意識すべきポイントは?

Page 20: JVM のいろはにほ #javajo

20Copyright©2015 NTT corp. All Rights Reserved.

•詳細を意識し始める時期(続)

•ソース変えずにデバッグしたい

•バイトコードインジェクションという手段がある。例:byteman

•JITコンパイル方法を知りたい

•Java Day Tokyo 2014 の資料が手始めに良い

•知りたくなる時期はたぶん来ない

開発者が意識すべきポイントは?

Page 21: JVM のいろはにほ #javajo

21Copyright©2015 NTT corp. All Rights Reserved.

•自己紹介

•JVM ってなに?

•JVM の主要機能

•コードの実行

•メモリの管理

•HeapStats

目次

Page 22: JVM のいろはにほ #javajo

22Copyright©2015 NTT corp. All Rights Reserved.

•Java のメモリ構造

JVM の機能:メモリの管理

ヒープ(Heap)

C ヒープ(C heap)

Java アプリが使うところ

主に JVM が使うところ

非ヒープ(Non Heap)

まとめてヒープと呼ぶ場合もある

Page 23: JVM のいろはにほ #javajo

23Copyright©2015 NTT corp. All Rights Reserved.

ヒープHeap

•ヒープ

JVM の機能:メモリの管理

非ヒープNon Heap

Page 24: JVM のいろはにほ #javajo

24Copyright©2015 NTT corp. All Rights Reserved.

•ヒープ:世代分け (Generation)

JVM の機能:メモリの管理

Young 世代Tenured 世代

(Old 世代)

JDK7 以前はPermanent 世代

JDK8 以降は世代なし

Page 25: JVM のいろはにほ #javajo

25Copyright©2015 NTT corp. All Rights Reserved.

•ヒープ:領域分け (Space)

JVM の機能:メモリの管理

Old

JDK7以前:Permanent

JDK8以降:Metaspace

Eden

Survivor

0

Survivor

1

Young 世代 Tenured(Old) 世代

Page 26: JVM のいろはにほ #javajo

26Copyright©2015 NTT corp. All Rights Reserved.

•なぜヒープを分けているの?

•複数の GC を利用するため

•GC = ガベージコレクション。不要なメモリを回収する機能

•複数の GC = 世代別 GC と呼ぶ

•なぜ複数必要なの?

•可能な限りアプリケーション停止時間を短くするための工夫

JVM の機能:メモリの管理

Page 27: JVM のいろはにほ #javajo

27Copyright©2015 NTT corp. All Rights Reserved.

•各 GC の担当範囲

JVM の機能:メモリの管理

Young 世代 Tenured(Old)世代 Non Heap

Minor GC 担当 Major GC 担当(※)

※:Javaオプションや状況によって範囲が異なります

Page 28: JVM のいろはにほ #javajo

28Copyright©2015 NTT corp. All Rights Reserved.

•メモリ周りのエラー

•早い話が OutOfMemoryError

•原因をどうやって確認するか

•メモリリーク?

•メモリ不足?

•それ以外(バグ)?

開発者が意識すべきポイントは?

Page 29: JVM のいろはにほ #javajo

29Copyright©2015 NTT corp. All Rights Reserved.

•OOME も色々ある

開発者が意識すべきポイントは?

「slideshare oome」で検索。http://www.slideshare.net/Yuj

iKubota/javalangoutofmemor

yerror-java

Page 30: JVM のいろはにほ #javajo

30Copyright©2015 NTT corp. All Rights Reserved.

•OutOfMemoryError:message

•ログ (message) をまず確認する

•ヒープなら、リークか不足か

•ヒープ使用量をグラフ化して確認

OOME 原因の確認方法

Page 31: JVM のいろはにほ #javajo

31Copyright©2015 NTT corp. All Rights Reserved.

•ヒープ使用量のグラフ化方法

•GC ログをGCViewer でグラフ化

•Used Heap (青線) の動きを見る

•GC ログは以下のオプションを追加して収集する

•-Xloggc:<path_to_file>

•-XX:+PrintGCDetails

•-XX:+PrintGCDateStamps

OOME 原因の確認方法

Page 32: JVM のいろはにほ #javajo

32Copyright©2015 NTT corp. All Rights Reserved.

•Concurrent Mark-Sweep の場合

GCって?

http://www.slideshare.net/YujiKubota/concu

rrent-marksweep-garbage-collection

Page 33: JVM のいろはにほ #javajo

33Copyright©2015 NTT corp. All Rights Reserved.

•自己紹介

•JVM ってなに?

•JVM の主要機能

•コードの実行

•メモリの管理

•HeapStats

目次

Page 34: JVM のいろはにほ #javajo

34Copyright©2015 NTT corp. All Rights Reserved.

詳細は JJUG CCC 2015 Spring で!※: #javajo では説明しました