SlideShare a Scribd company logo
1 of 34
Download to read offline
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

What's hot

Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)Amazon Web Services Japan
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with KarateTakanori Suzuki
 
CloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しようCloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しようEiji KOMINAMI
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと土岐 孝平
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Koichi Sakata
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するKohei Tokunaga
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてShigeru Tatsuta
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Norito Agetsuma
 
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法Tetsutaro Watanabe
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧 Ryosuke Yamazaki
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計Kouji YAMADA
 
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionThe Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionYoshifumi Kawai
 

What's hot (20)

Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
20200303 AWS Black Belt Online Seminar AWS Cloud Development Kit (CDK)
 
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
 
CloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しようCloudFrontのリアルタイムログをKibanaで可視化しよう
CloudFrontのリアルタイムログをKibanaで可視化しよう
 
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきことこれからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動するStargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
 
Serverless時代のJavaについて
Serverless時代のJavaについてServerless時代のJavaについて
Serverless時代のJavaについて
 
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
 
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionThe Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
 

Viewers also liked

Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccConcurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccYuji Kubota
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javaYuji Kubota
 
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjugYuji Kubota
 
Way Improved :) GC Tuning Confessions - presented at JavaOne2015
Way Improved :) GC Tuning Confessions - presented at JavaOne2015Way Improved :) GC Tuning Confessions - presented at JavaOne2015
Way Improved :) GC Tuning Confessions - presented at JavaOne2015Monica Beckwith
 
GCについて
GCについてGCについて
GCについてcactusman
 
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...Monica Beckwith
 
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!masakazu matsubara
 

Viewers also liked (8)

Concurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_cccConcurrent Mark-Sweep Garbage Collection #jjug_ccc
Concurrent Mark-Sweep Garbage Collection #jjug_ccc
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷java
 
楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug楽して JVM を学びたい #jjug
楽して JVM を学びたい #jjug
 
Way Improved :) GC Tuning Confessions - presented at JavaOne2015
Way Improved :) GC Tuning Confessions - presented at JavaOne2015Way Improved :) GC Tuning Confessions - presented at JavaOne2015
Way Improved :) GC Tuning Confessions - presented at JavaOne2015
 
GCについて
GCについてGCについて
GCについて
 
GCが止まらない
GCが止まらないGCが止まらない
GCが止まらない
 
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
Garbage First Garbage Collector (G1 GC) - Migration to, Expectations and Adva...
 
高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!高速なソートアルゴリズムを書こう!!
高速なソートアルゴリズムを書こう!!
 

Similar to JVM のいろはにほ #javajo

Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]David Buck
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」y torazuka
 
C#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコンC#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコンShin-ya Koga
 
RUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践SmalltalkRUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践SmalltalkSho Yoshida
 
プログラマ人生論
プログラマ人生論プログラマ人生論
プログラマ人生論ymmt
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewYuji Kubota
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Koichi Sakata
 
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)NTT DATA OSS Professional Services
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpYuji Kubota
 
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugOpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugYuji Kubota
 
PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014Yuuki Takezawa
 
初心者にも丸わかり!Soft layeroverlaynetworkの魅力
初心者にも丸わかり!Soft layeroverlaynetworkの魅力初心者にも丸わかり!Soft layeroverlaynetworkの魅力
初心者にも丸わかり!Soft layeroverlaynetworkの魅力WendyKanaeUeda
 
Example of exiting legacy system
Example of exiting legacy systemExample of exiting legacy system
Example of exiting legacy systemTakamchiTanaka
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOneAdvancedTechNight
 
Cocos2d-xを用いた "LINE タワーライジング" の開発事例
Cocos2d-xを用いた "LINE タワーライジング" の開発事例Cocos2d-xを用いた "LINE タワーライジング" の開発事例
Cocos2d-xを用いた "LINE タワーライジング" の開発事例gree_tech
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワークTakuya Sato
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageKoichi Sakata
 

Similar to JVM のいろはにほ #javajo (20)

Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
Lambda: A Peek Under The Hood [Java Day Tokyo 2015 6-3]
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
 
C#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコンC#/Java & Linux で始める ET ロボコン
C#/Java & Linux で始める ET ロボコン
 
RUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践SmalltalkRUNNING Smalltalk - 実践Smalltalk
RUNNING Smalltalk - 実践Smalltalk
 
プログラマ人生論
プログラマ人生論プログラマ人生論
プログラマ人生論
 
HeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical PreviewHeapStats: Introduction and Technical Preview
HeapStats: Introduction and Technical Preview
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
java-ja TDD 2nd
java-ja TDD 2ndjava-ja TDD 2nd
java-ja TDD 2nd
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
 
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
 
JavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jpJavaOne 2015 JDK Update (Jigsaw) #j1jp
JavaOne 2015 JDK Update (Jigsaw) #j1jp
 
Froyo DalvikVM JIT
Froyo DalvikVM JITFroyo DalvikVM JIT
Froyo DalvikVM JIT
 
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugOpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
 
PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014PHP フィールドインジェクションに挑戦する PHP勉強会2014
PHP フィールドインジェクションに挑戦する PHP勉強会2014
 
初心者にも丸わかり!Soft layeroverlaynetworkの魅力
初心者にも丸わかり!Soft layeroverlaynetworkの魅力初心者にも丸わかり!Soft layeroverlaynetworkの魅力
初心者にも丸わかり!Soft layeroverlaynetworkの魅力
 
Example of exiting legacy system
Example of exiting legacy systemExample of exiting legacy system
Example of exiting legacy system
 
ななめ45°から見たJavaOne
ななめ45°から見たJavaOneななめ45°から見たJavaOne
ななめ45°から見たJavaOne
 
Cocos2d-xを用いた "LINE タワーライジング" の開発事例
Cocos2d-xを用いた "LINE タワーライジング" の開発事例Cocos2d-xを用いた "LINE タワーライジング" の開発事例
Cocos2d-xを用いた "LINE タワーライジング" の開発事例
 
2009年のPHPフレームワーク
2009年のPHPフレームワーク2009年のPHPフレームワーク
2009年のPHPフレームワーク
 
Introduction to GraalVM and Native Image
Introduction to GraalVM and Native ImageIntroduction to GraalVM and Native Image
Introduction to GraalVM and Native Image
 

More from Yuji Kubota

Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Yuji Kubota
 
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Yuji Kubota
 
Head toward Java 14 and Java 15 #LINE_DM
Head toward Java 14 and Java 15 #LINE_DMHead toward Java 14 and Java 15 #LINE_DM
Head toward Java 14 and Java 15 #LINE_DMYuji Kubota
 
Head toward Java 14 and Java 15
Head toward Java 14 and Java 15Head toward Java 14 and Java 15
Head toward Java 14 and Java 15Yuji Kubota
 
オンライン会議と音声認識
オンライン会議と音声認識オンライン会議と音声認識
オンライン会議と音声認識Yuji Kubota
 
Head toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjugHead toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjugYuji Kubota
 
Catch up Java 12 and Java 13
Catch up Java 12 and Java 13Catch up Java 12 and Java 13
Catch up Java 12 and Java 13Yuji Kubota
 
Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjugMigration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjugYuji Kubota
 
Introduction to Java 11: Support and JVM Features #jjug
Introduction to Java 11: Support and JVM Features #jjugIntroduction to Java 11: Support and JVM Features #jjug
Introduction to Java 11: Support and JVM Features #jjugYuji Kubota
 
Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?Yuji Kubota
 
Project Jigsaw #kanjava
Project Jigsaw #kanjavaProject Jigsaw #kanjava
Project Jigsaw #kanjavaYuji Kubota
 
Java 9 and Future #jjug
Java 9 and Future #jjugJava 9 and Future #jjug
Java 9 and Future #jjugYuji Kubota
 
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...Yuji Kubota
 
Prepare for Java 9 #jjug
Prepare for Java 9 #jjugPrepare for Java 9 #jjug
Prepare for Java 9 #jjugYuji Kubota
 
jcmd #javacasual
jcmd #javacasualjcmd #javacasual
jcmd #javacasualYuji Kubota
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpYuji Kubota
 
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualOpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualYuji Kubota
 
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTHeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTYuji Kubota
 
JDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjugJDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjugYuji Kubota
 
JDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUGJDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUGYuji Kubota
 

More from Yuji Kubota (20)

Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
 
Head toward Java 15 and Java 16
Head toward Java 15 and Java 16Head toward Java 15 and Java 16
Head toward Java 15 and Java 16
 
Head toward Java 14 and Java 15 #LINE_DM
Head toward Java 14 and Java 15 #LINE_DMHead toward Java 14 and Java 15 #LINE_DM
Head toward Java 14 and Java 15 #LINE_DM
 
Head toward Java 14 and Java 15
Head toward Java 14 and Java 15Head toward Java 14 and Java 15
Head toward Java 14 and Java 15
 
オンライン会議と音声認識
オンライン会議と音声認識オンライン会議と音声認識
オンライン会議と音声認識
 
Head toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjugHead toward Java 13 and Java 14 #jjug
Head toward Java 13 and Java 14 #jjug
 
Catch up Java 12 and Java 13
Catch up Java 12 and Java 13Catch up Java 12 and Java 13
Catch up Java 12 and Java 13
 
Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjugMigration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjug
 
Introduction to Java 11: Support and JVM Features #jjug
Introduction to Java 11: Support and JVM Features #jjugIntroduction to Java 11: Support and JVM Features #jjug
Introduction to Java 11: Support and JVM Features #jjug
 
Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?Java 10でぼくたちの生活はどう変わるの?
Java 10でぼくたちの生活はどう変わるの?
 
Project Jigsaw #kanjava
Project Jigsaw #kanjavaProject Jigsaw #kanjava
Project Jigsaw #kanjava
 
Java 9 and Future #jjug
Java 9 and Future #jjugJava 9 and Future #jjug
Java 9 and Future #jjug
 
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
Secrets of Rock Star Developers (and How to Become One!) [CON7615] (Yuji KUBO...
 
Prepare for Java 9 #jjug
Prepare for Java 9 #jjugPrepare for Java 9 #jjug
Prepare for Java 9 #jjug
 
jcmd #javacasual
jcmd #javacasualjcmd #javacasual
jcmd #javacasual
 
JavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jpJavaOne 2016 Java SE Feedback #jjug #j1jp
JavaOne 2016 Java SE Feedback #jjug #j1jp
 
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualOpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
 
HeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LTHeapStats @ Seasar Conference 2015 LT
HeapStats @ Seasar Conference 2015 LT
 
JDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjugJDK9 新機能 (日本語&ショートバージョン) #jjug
JDK9 新機能 (日本語&ショートバージョン) #jjug
 
JDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUGJDK9 Features (Summary, 31/Jul/2015) #JJUG
JDK9 Features (Summary, 31/Jul/2015) #JJUG
 

Recently uploaded

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

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