Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JVM のいろはにほ #javajo

20,886 views

Published on

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).

Published in: Technology
  • Be the first to comment

JVM のいろはにほ #javajo

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

×