Your SlideShare is downloading. ×
JVM のいろはにほ #javajo
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

JVM のいろはにほ #javajo

0
views

Published on

Java 女子部 講義資料 …

Java 女子部 講義資料
https://javajo.doorkeeper.jp/events/21337

This presentation is used to lecture about the introduction of Java Virtual Machine at Java Japan User Group (Girls).


0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
0
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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 では説明しました