Hello Java
Java女子部 Oracleコンサルによる超Java入門
伊藤 智博(Chihiro Ito)
Twitter : @chiroito
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
自己紹介
• 日本オラクル Fusion Middleware製品コンサルタント
– Java SE全般/Coherence/Event Processor/トラブルシュートを主に担当
• 講演(http://www.slideshare.net/ChihiroIto1)
– オラクルの公式イベント
– 日本Javaユーザグループなど
• 執筆
– 技術評論社様
• 絵で見て分かるJVM(http://gihyo.jp/dev/serial/01/jvm-arc)
2
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
ここで示されている見解は私個人のものであり
所属会社の見解を反映したものではありません
3
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
アジェンダ
1. Javaとは
2. Java VMの内部
3. アプリケーションとJava VM
4. HotSpot JVM
5. アプリケーション開発方法
6. Java VM運用方法
7. Javaの情報収集方法
4
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
1.Javaとは
5
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
• Raspberry Pi
• 携帯電話
• GUI
• CUI
• 動的なサイト
• スマホアプリの通信先
Javaが使われている分野
組み込み機器 デスクトップ
ブラウザ
/ スマホアプリ
実行環境
システム
■
- ×
>java Hello
please Input : Java
Hello Java !
>
■
- ×
6
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
• オブジェクト指向によって
プログラミングを行う言語
• アプリケーション開発者が使用
• 教材はたくさんある
• Java言語によって書かれた
アプリケーションの実行環境
• インフラ担当者が使用
• 教材はほとんどない
7
Javaとは
プログラミング言語 実行環境
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
• 組込み機器用実行環境
• Java SEに比べて機能
を限定し軽量
• デスクトップやサーバ
で使用する実行環境
• 一般的に言うJava
• 標準的なAPIの仕様
– Servlet/JSF/JSP/EJB
/CDI/JAX-RS/JPA
• 実行にAPサーバが必須
Javaの種類
Java SE Embedded
/ Java ME
Java SE Java EE
Java SE
API
実行環境実行環境
8
※ APサーバ:アプリケーションサーバ
※
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
実行環境のメリット
Linux用
アプリ
Linux
Solaris用
アプリ
Solaris
ネイティブの場合
環境ごとにアプリを作る
実行環境
アプリ
Linux
実行環境
Solaris
アプリ
Javaの場合
環境の差異は実行環境が吸収
→1つのアプリで良い
9
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
アプリケーション(AP)サーバとは
• Java EEアプリケーションの実行に必要
• APサーバはJava EEによるAPIの実装を提供
• リソースを管理およびアプリケーションへ提供
– データベース接続など
• 運用に必要なツールも提供
• ベンダーやオープンソースによって開発
– WebLogic Server、Oracle Application Server
– GlassFish Server
10
実行環境
アプリ
OS
APサーバ
アプリ…
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
Javaの作られ方
• 仕様の要望をJava Specification Requests(JSR)としてまとめる
• Java Community Process(JCP)の一部メンバーによって投票
– JCPメンバーにはベンダーだけではなく利用者もいる
• 仕様を策定し、参照実装(RI : Reference Implementation)を作成
– 製品ベンダーはこの仕様にあわせてRIを参考に開発
• 互換テストにより、仕様を満たすことで認定
11
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
さまざまな実行環境
Oracle
実行環境
(HotSpot)
アプリ
OS
Oracle
実行環境
(JRockit)
アプリ
OS
H社様
実行環境
アプリ
OS
OpenJDK
(HotSpot)
アプリ
OS
I社様
実行環境
アプリ
OS
• さまざまな企業(ベンダー)やオープンソースが実装
12
• さまざまな企業(ベンダー)
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
開発から実行するまでの流れ
開発者 アプリケーション
実行環境
13
• ソースファイル
– Java言語で書かれる
• コンパイル
– ソースファイルから
クラスファイルを生成
• クラスファイル
– 実行環境が実行できる
バイトコードが含まれる
実行
ソース
ファイル
記述
クラス
ファイル
コンパイル
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
API
アプリケーション
• Java VM
– バイトコードを読み込み、
ネイティブコードへ変換して
アプリケーションを実行する
– アプリケーションの実行に必要な
メモリを管理する
• API
– 標準で含まれるクラスの集合
– Stringクラスなど
実行環境とは
クラス
ファイル
実行環境
読込
クラス
ファイル
クラス
ファイル
クラス
ファイル
14
参照
Java VM
読込
クラス
ファイル
クラス
ファイル
読込んだ
クラス
ファイル 実行
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
2.Java VMの内部
15
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
Java VMとは
• Java Virtual Machineの略称、更に略してJVMと呼ばれる
• javaコマンドで実行される
• OSから見るとプロセス
• ベンダーごとの実装によって細かい動きは異なる
16
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
Java VMの役割
• アプリケーションを動かす
• アプリケーションのサポート
– アプリケーションの実行に必要なクラスファイルを読込む
– バイトコードをネイティブコードへ変換・最適化
– オブジェクトの終了処理
– アプリケーションが使用したメモリの掃除(ガベージ・コレクション)
– など
17
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
Java VMの構成要素
• スレッド
– 与えられた仕事を実行する
– OSのCPUリソースを使用
• メモリ領域
– スレッドが作業領域として使用
– OSのメモリリソースを使用
18
メモリ領域
JVMプロセス
スレッド
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
メモリ領域
Java VMが持つ2種類のスレッド
• アプリケーションスレッド
– アプリケーションを動かす
– 開発者が作成・管理可能
• VMスレッド
– アプリケーションをサポートする
– 開発者は気にしない
19
JVMプロセス
VMアプリケーション
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
メモリ領域
いろいろな役割のVMスレッド
• スレッドによって役割がある
– ガベージ・コレクション スレッド
– コンパイル スレッド
– ファイナライザ スレッド
20
JVMプロセス
アプリケーションGC担当
コンパイル
担当
VM
など
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
Java VMのメモリ構造
• メモリ領域は2種類
– ヒープ領域
• アプリケーションのオブジェクトを格納
• アプリケーションがnewすると使用
• 開発者はオブジェクトの削除を意識不要
– ネイティブ領域
• Java VM自身が使用するメモリ空間
21
メモリ領域
JVMプロセス
ネイティブヒープ
VMアプリケーション
abc
new GC
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
Java VMのネイティブ領域
• JVM内部で使用
• 他にもさまざまな用途で使用
– スレッドスタック
• スレッドが処理中の情報を格納
– メタスペース
• 読込んだクラスの情報を格納
22
JVMプロセス
ネイティブヒープ
VMアプリケーション
スレッド
スタック
処理中の
情報を記録
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
3.アプリケーションとJava VM
23
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
実行環境
String s = new String(“abc”);
1. Stringクラスの読み込み
2. Stringオブジェクトの作成
3. 変数とオブジェクトの紐付け
Java VMの動きの例
ヒープ
メタスペース
s
※フィールドを含む
変数※
API開発者が実行したい処理
実行環境が行う主な処理
abc
オブジェクト
2
参照 3
24
1
StringString
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
アプリケーションをサポートする機能例
• ガベージ・コレクション
– ヒープ領域にある使われないオブジェクトを削除する
– GCスレッドによって実行される
– 実行中はアプリケーションが停止する(Stop The World : STW)
25
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
アプリケーションとGC
String s = new String(“abc”);
s = null ;
メモリ
abcs
参照 参照があるため
GC対象ではない
メモリ
abcs
参照を削除
参照がないため
GC対象
26
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
4.HotSpot JVM
27
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
HotSpotのヒープ構造
• 大きく2つに分割され、細かくは4つの領域に分割
– New領域
• Eden
– 最初にオブジェクトを作られる領域
• Survivor 0/1
– 1回以上GCを経験したオブジェクトの領域
– Tenured領域
• 指定回数以上GCを経験した、
またはSurvivorに入りきらなかった
オブジェクトの領域
28
Eden
領域
Tenured
領域
Survivor 0
領域
Survivor 1
領域
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
HotSpotのGC
• GCはNew領域だけを対象とするものと全体を対象とする2種類
• GCの方法は主に3種類
– パラレル
• 複数のスレッドでGCを行う
– コンカレント・マーク&スイープ (CMS)
• 複数の役割に分けてGCを行う
• アプリと並行して実行可能な役割もある
– ガベージ・ファースト (G1GC)
• 領域を細かく分ける
• 複数の役割に分けてGCを行う
29
Eden
領域
Tenured
領域
Survivor 0
領域
Survivor 1
領域
Full GC
Minor GC
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
1.Edenにオブジェクトが作成される 3.Edenにオブジェクトが作成される
2.GCが実行され、参照のあるオブ
ジェクトはEdenからSurvivor 0へ移
動
4.GCが実行され、参照のあるオブ
ジェクトはEdenからSurvivor 1へ移
動
GCによるオブジェクトの動き (1/2)
Eden
領域
Tenured
領域
Survivor 0
領域
Survivor 1
領域
参照のあるオブジェクト 参照の無いオブジェクト
Eden
領域
Tenured
領域
Survivor 0
領域
Survivor 1
領域
Eden
領域
Tenured
領域
Survivor 0
領域
Survivor 1
領域
1 2
1 2
Eden
領域
Tenured
領域
Survivor 0
領域
Survivor 1
領域
1 23
1 3
30
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
5.Edenにオブジェクトが作成される 7.GCを繰返すとTenuredがいっぱい
になる
6.GCが実行され、一定回数GCを
経験するとTenuredへ移動する
8.Full GCが実行され、参照のない
オブジェクトは全て削除される
GCによるオブジェクトの動き (2/2)
Eden
領域
Tenured
領域
Survivor 0
領域
Survivor 1
領域
参照のあるオブジェクト 参照の無いオブジェクト
Eden
領域
Tenured
領域
Survivor 0
領域
Survivor 1
領域
Eden
領域
Tenured
領域
Survivor 0
領域
Survivor 1
領域
1
3
Eden
領域
Tenured
領域
Survivor 0
領域
Survivor 1
領域1 3
31
1
1
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
5.Javaアプリケーションの開発方法
32
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
開発には Java Development Kit を使用
• Java用のソフトウェア開発キット(SDK)
• Java Development Kit(JDK)の構成要素
– 実行環境(JRE)
– 開発ツール:コンパイラ、アーカイブ、ドキュメント生成
– 運用ツール:分析ツール、監視ツール
33
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
アプリケーション開発で扱う3種類のファイル
• ソースファイル (*.java)
– 開発者がJava言語で作成するファイル
• クラスファイル (*.class)
– JVMが実行可能なバイトコードを含むファイル
• アーカイブファイル (*.jar, *.war, *.ear)
– クラスファイルをまとめたファイル
34
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 35
アプリケーション開発の流れ
ソース
ファイル
クラス
ファイル
アーカイブ
ファイル
記述 実行実行コンパイル アーカイブ
• 実行はクラスファイルとアーカイブファイルのどちらでも可能
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
昔のアプリケーション開発の流れ
• エディタ(メモ帳など)を使用してソースファイルを作成
• JDKを直接使用してクラスファイル・アーカイブファイルを作成
36
ソース
ファイル
クラス
ファイル
アーカイブ
ファイル
javacコマンド jarコマンド
エディタ JDK
実行
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
IDEを使ったアプリケーション開発の流れ
• 統合開発環境:Integrated Development Environment (IDE)
– Eclipse, Netbeans, JDeveloper など
– アプリケーション開発に必要な機能がまとめられている
37
ソース
ファイル
クラス
ファイル
アーカイブ
ファイル
Run保存/ビルド エクスポート
IDEを使った開発
記述 実行
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
商用で使われるアプリケーション開発の流れ(例)
• CIツール
– 継続的にテストやビルドを繰返し、品質管理を行うツール
– ビルドツールを使用してコンパイルやアーカイブを行う
38
ソース
ファイル
クラス
ファイル
アーカイブ
ファイル
実行コンパイル アーカイブ
IDE CIツール
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
6.Java VMの運用方法
39
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
なぜ監視するのか
• アプリケーションとJVMが動けているか確認
– OSリソース/APサーバ/Java VM/アプリケーションのリソースの過不足
– アプリケーションが動かず、Java VMばかり動いていないか
– アプリケーションやJava VMが無駄な処理をしていないか
40
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
• 使用量
– 各領域のGC前後の使用量
• GCの履歴
– GC開始時間と処理時間
• 占有オブジェクト
– ヒープを閉めている
オブジェクトの種類
• ステータス
– 処理待ちしていないか
– スリープしていないか
• 実行中の処理
– 実行中の処理の
スタックトレース
• 処理量
– 起動からの処理量
• リソース使用量
– DB接続の使用数など
• メソッドの実行時間
– メソッドの呼び出しごと
と累計の処理時間
監視する項目
ヒープ スレッド アプリ
41
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
• 使用量
– 各領域のGC前後の使用量
• GCの履歴
– GC開始時間と処理時間
• 占有オブジェクト
– ヒープを閉めている
オブジェクトの種類
• ステータス
– 処理待ちしていないか
– スリープしていないか
• 実行中の処理
– 実行中の処理の
スタックトレース
• 処理量
– 起動からの処理量
• リソース使用量
– DB接続の使用数など
• メソッドの実行時間
– メソッドの呼び出しごと
と累計の処理時間
監視するツールと機能
ヒープ スレッド アプリ
42
GCログ
ヒープダンプ
MBean
プロファイラ
スレッドダンプ
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
7.Javaの情報収集方法
43
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
• 毎月Javaの勉強会を開催
• 年2回大規模な勉強会を開催
• Twitter @JJUG、#JJUG
• 関東と関西で開催
• もくもく会と勉強会を開催
• Twitter @java_women、#javajo
• 1~2ヶ月に1回 勉強会を開催
• Twitter @kan_java、#kanjava
• Twitter #okajug
Javaのコミュニティに参加しましょう
日本Javaユーザグループ Java女子部
関西Javaエンジニアの会 岡山Javaユーザ会
44
• Twitter #hirojug
広島Javaユーザグループ
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
Oracleが提供するオススメの情報源
• 認定試験
– Oracle Certified Java Programmer Silver/Gold
• ドキュメント
– JavaMagazine (http://www.oracle.com/technetwork/java/javamagazine/index.html)
• 日本語版 (http://www.oracle.com/technetwork/jp/articles/java/overview/index.html)
• イベント
– 国内
• Java Day Tokyo、JavaOne Tokyo、Oracle DBA & Developer Day
– 海外
• JavaOne San Francisco
45
Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito
• Java チャンピオン
– Javaにおけるリーダシップの役割を持つ
– Java の技術に関する啓蒙活動等を行う
– 厳選されたJava のスペシャリスト
• Oracle Ace
– Oracleの製品に卓越した知識と経験を持つ
– コミュニティ活動を強力に支援
– トップエンジニアとしてオラクルが認定
• エバンジェリスト
– 技術の採用を促す広報役
– 主に、所属会社の製品や技術戦略に則って
活動し、それらをエンジニアに広める
• コミッター
– 製品やその機能を開発し、反映できる人
– JavaではOpenJDKや各種ライブラリ
信頼できる情報発信源から情報を得ましょう
46

Hello Java

  • 1.
  • 2.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 自己紹介 • 日本オラクル Fusion Middleware製品コンサルタント – Java SE全般/Coherence/Event Processor/トラブルシュートを主に担当 • 講演(http://www.slideshare.net/ChihiroIto1) – オラクルの公式イベント – 日本Javaユーザグループなど • 執筆 – 技術評論社様 • 絵で見て分かるJVM(http://gihyo.jp/dev/serial/01/jvm-arc) 2
  • 3.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito ここで示されている見解は私個人のものであり 所属会社の見解を反映したものではありません 3
  • 4.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito アジェンダ 1. Javaとは 2. Java VMの内部 3. アプリケーションとJava VM 4. HotSpot JVM 5. アプリケーション開発方法 6. Java VM運用方法 7. Javaの情報収集方法 4
  • 5.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 1.Javaとは 5
  • 6.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito • Raspberry Pi • 携帯電話 • GUI • CUI • 動的なサイト • スマホアプリの通信先 Javaが使われている分野 組み込み機器 デスクトップ ブラウザ / スマホアプリ 実行環境 システム ■ - × >java Hello please Input : Java Hello Java ! > ■ - × 6
  • 7.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito • オブジェクト指向によって プログラミングを行う言語 • アプリケーション開発者が使用 • 教材はたくさんある • Java言語によって書かれた アプリケーションの実行環境 • インフラ担当者が使用 • 教材はほとんどない 7 Javaとは プログラミング言語 実行環境
  • 8.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito • 組込み機器用実行環境 • Java SEに比べて機能 を限定し軽量 • デスクトップやサーバ で使用する実行環境 • 一般的に言うJava • 標準的なAPIの仕様 – Servlet/JSF/JSP/EJB /CDI/JAX-RS/JPA • 実行にAPサーバが必須 Javaの種類 Java SE Embedded / Java ME Java SE Java EE Java SE API 実行環境実行環境 8 ※ APサーバ:アプリケーションサーバ ※
  • 9.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 実行環境のメリット Linux用 アプリ Linux Solaris用 アプリ Solaris ネイティブの場合 環境ごとにアプリを作る 実行環境 アプリ Linux 実行環境 Solaris アプリ Javaの場合 環境の差異は実行環境が吸収 →1つのアプリで良い 9
  • 10.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito アプリケーション(AP)サーバとは • Java EEアプリケーションの実行に必要 • APサーバはJava EEによるAPIの実装を提供 • リソースを管理およびアプリケーションへ提供 – データベース接続など • 運用に必要なツールも提供 • ベンダーやオープンソースによって開発 – WebLogic Server、Oracle Application Server – GlassFish Server 10 実行環境 アプリ OS APサーバ アプリ…
  • 11.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito Javaの作られ方 • 仕様の要望をJava Specification Requests(JSR)としてまとめる • Java Community Process(JCP)の一部メンバーによって投票 – JCPメンバーにはベンダーだけではなく利用者もいる • 仕様を策定し、参照実装(RI : Reference Implementation)を作成 – 製品ベンダーはこの仕様にあわせてRIを参考に開発 • 互換テストにより、仕様を満たすことで認定 11
  • 12.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito さまざまな実行環境 Oracle 実行環境 (HotSpot) アプリ OS Oracle 実行環境 (JRockit) アプリ OS H社様 実行環境 アプリ OS OpenJDK (HotSpot) アプリ OS I社様 実行環境 アプリ OS • さまざまな企業(ベンダー)やオープンソースが実装 12 • さまざまな企業(ベンダー)
  • 13.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 開発から実行するまでの流れ 開発者 アプリケーション 実行環境 13 • ソースファイル – Java言語で書かれる • コンパイル – ソースファイルから クラスファイルを生成 • クラスファイル – 実行環境が実行できる バイトコードが含まれる 実行 ソース ファイル 記述 クラス ファイル コンパイル
  • 14.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito API アプリケーション • Java VM – バイトコードを読み込み、 ネイティブコードへ変換して アプリケーションを実行する – アプリケーションの実行に必要な メモリを管理する • API – 標準で含まれるクラスの集合 – Stringクラスなど 実行環境とは クラス ファイル 実行環境 読込 クラス ファイル クラス ファイル クラス ファイル 14 参照 Java VM 読込 クラス ファイル クラス ファイル 読込んだ クラス ファイル 実行
  • 15.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 2.Java VMの内部 15
  • 16.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito Java VMとは • Java Virtual Machineの略称、更に略してJVMと呼ばれる • javaコマンドで実行される • OSから見るとプロセス • ベンダーごとの実装によって細かい動きは異なる 16
  • 17.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito Java VMの役割 • アプリケーションを動かす • アプリケーションのサポート – アプリケーションの実行に必要なクラスファイルを読込む – バイトコードをネイティブコードへ変換・最適化 – オブジェクトの終了処理 – アプリケーションが使用したメモリの掃除(ガベージ・コレクション) – など 17
  • 18.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito Java VMの構成要素 • スレッド – 与えられた仕事を実行する – OSのCPUリソースを使用 • メモリ領域 – スレッドが作業領域として使用 – OSのメモリリソースを使用 18 メモリ領域 JVMプロセス スレッド
  • 19.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito メモリ領域 Java VMが持つ2種類のスレッド • アプリケーションスレッド – アプリケーションを動かす – 開発者が作成・管理可能 • VMスレッド – アプリケーションをサポートする – 開発者は気にしない 19 JVMプロセス VMアプリケーション
  • 20.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito メモリ領域 いろいろな役割のVMスレッド • スレッドによって役割がある – ガベージ・コレクション スレッド – コンパイル スレッド – ファイナライザ スレッド 20 JVMプロセス アプリケーションGC担当 コンパイル 担当 VM など
  • 21.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito Java VMのメモリ構造 • メモリ領域は2種類 – ヒープ領域 • アプリケーションのオブジェクトを格納 • アプリケーションがnewすると使用 • 開発者はオブジェクトの削除を意識不要 – ネイティブ領域 • Java VM自身が使用するメモリ空間 21 メモリ領域 JVMプロセス ネイティブヒープ VMアプリケーション abc new GC
  • 22.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito Java VMのネイティブ領域 • JVM内部で使用 • 他にもさまざまな用途で使用 – スレッドスタック • スレッドが処理中の情報を格納 – メタスペース • 読込んだクラスの情報を格納 22 JVMプロセス ネイティブヒープ VMアプリケーション スレッド スタック 処理中の 情報を記録
  • 23.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 3.アプリケーションとJava VM 23
  • 24.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 実行環境 String s = new String(“abc”); 1. Stringクラスの読み込み 2. Stringオブジェクトの作成 3. 変数とオブジェクトの紐付け Java VMの動きの例 ヒープ メタスペース s ※フィールドを含む 変数※ API開発者が実行したい処理 実行環境が行う主な処理 abc オブジェクト 2 参照 3 24 1 StringString
  • 25.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito アプリケーションをサポートする機能例 • ガベージ・コレクション – ヒープ領域にある使われないオブジェクトを削除する – GCスレッドによって実行される – 実行中はアプリケーションが停止する(Stop The World : STW) 25
  • 26.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito アプリケーションとGC String s = new String(“abc”); s = null ; メモリ abcs 参照 参照があるため GC対象ではない メモリ abcs 参照を削除 参照がないため GC対象 26
  • 27.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 4.HotSpot JVM 27
  • 28.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito HotSpotのヒープ構造 • 大きく2つに分割され、細かくは4つの領域に分割 – New領域 • Eden – 最初にオブジェクトを作られる領域 • Survivor 0/1 – 1回以上GCを経験したオブジェクトの領域 – Tenured領域 • 指定回数以上GCを経験した、 またはSurvivorに入りきらなかった オブジェクトの領域 28 Eden 領域 Tenured 領域 Survivor 0 領域 Survivor 1 領域
  • 29.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito HotSpotのGC • GCはNew領域だけを対象とするものと全体を対象とする2種類 • GCの方法は主に3種類 – パラレル • 複数のスレッドでGCを行う – コンカレント・マーク&スイープ (CMS) • 複数の役割に分けてGCを行う • アプリと並行して実行可能な役割もある – ガベージ・ファースト (G1GC) • 領域を細かく分ける • 複数の役割に分けてGCを行う 29 Eden 領域 Tenured 領域 Survivor 0 領域 Survivor 1 領域 Full GC Minor GC
  • 30.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 1.Edenにオブジェクトが作成される 3.Edenにオブジェクトが作成される 2.GCが実行され、参照のあるオブ ジェクトはEdenからSurvivor 0へ移 動 4.GCが実行され、参照のあるオブ ジェクトはEdenからSurvivor 1へ移 動 GCによるオブジェクトの動き (1/2) Eden 領域 Tenured 領域 Survivor 0 領域 Survivor 1 領域 参照のあるオブジェクト 参照の無いオブジェクト Eden 領域 Tenured 領域 Survivor 0 領域 Survivor 1 領域 Eden 領域 Tenured 領域 Survivor 0 領域 Survivor 1 領域 1 2 1 2 Eden 領域 Tenured 領域 Survivor 0 領域 Survivor 1 領域 1 23 1 3 30
  • 31.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 5.Edenにオブジェクトが作成される 7.GCを繰返すとTenuredがいっぱい になる 6.GCが実行され、一定回数GCを 経験するとTenuredへ移動する 8.Full GCが実行され、参照のない オブジェクトは全て削除される GCによるオブジェクトの動き (2/2) Eden 領域 Tenured 領域 Survivor 0 領域 Survivor 1 領域 参照のあるオブジェクト 参照の無いオブジェクト Eden 領域 Tenured 領域 Survivor 0 領域 Survivor 1 領域 Eden 領域 Tenured 領域 Survivor 0 領域 Survivor 1 領域 1 3 Eden 領域 Tenured 領域 Survivor 0 領域 Survivor 1 領域1 3 31 1 1
  • 32.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 5.Javaアプリケーションの開発方法 32
  • 33.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 開発には Java Development Kit を使用 • Java用のソフトウェア開発キット(SDK) • Java Development Kit(JDK)の構成要素 – 実行環境(JRE) – 開発ツール:コンパイラ、アーカイブ、ドキュメント生成 – 運用ツール:分析ツール、監視ツール 33
  • 34.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito アプリケーション開発で扱う3種類のファイル • ソースファイル (*.java) – 開発者がJava言語で作成するファイル • クラスファイル (*.class) – JVMが実行可能なバイトコードを含むファイル • アーカイブファイル (*.jar, *.war, *.ear) – クラスファイルをまとめたファイル 34
  • 35.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 35 アプリケーション開発の流れ ソース ファイル クラス ファイル アーカイブ ファイル 記述 実行実行コンパイル アーカイブ • 実行はクラスファイルとアーカイブファイルのどちらでも可能
  • 36.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 昔のアプリケーション開発の流れ • エディタ(メモ帳など)を使用してソースファイルを作成 • JDKを直接使用してクラスファイル・アーカイブファイルを作成 36 ソース ファイル クラス ファイル アーカイブ ファイル javacコマンド jarコマンド エディタ JDK 実行
  • 37.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito IDEを使ったアプリケーション開発の流れ • 統合開発環境:Integrated Development Environment (IDE) – Eclipse, Netbeans, JDeveloper など – アプリケーション開発に必要な機能がまとめられている 37 ソース ファイル クラス ファイル アーカイブ ファイル Run保存/ビルド エクスポート IDEを使った開発 記述 実行
  • 38.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 商用で使われるアプリケーション開発の流れ(例) • CIツール – 継続的にテストやビルドを繰返し、品質管理を行うツール – ビルドツールを使用してコンパイルやアーカイブを行う 38 ソース ファイル クラス ファイル アーカイブ ファイル 実行コンパイル アーカイブ IDE CIツール
  • 39.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 6.Java VMの運用方法 39
  • 40.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito なぜ監視するのか • アプリケーションとJVMが動けているか確認 – OSリソース/APサーバ/Java VM/アプリケーションのリソースの過不足 – アプリケーションが動かず、Java VMばかり動いていないか – アプリケーションやJava VMが無駄な処理をしていないか 40
  • 41.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito • 使用量 – 各領域のGC前後の使用量 • GCの履歴 – GC開始時間と処理時間 • 占有オブジェクト – ヒープを閉めている オブジェクトの種類 • ステータス – 処理待ちしていないか – スリープしていないか • 実行中の処理 – 実行中の処理の スタックトレース • 処理量 – 起動からの処理量 • リソース使用量 – DB接続の使用数など • メソッドの実行時間 – メソッドの呼び出しごと と累計の処理時間 監視する項目 ヒープ スレッド アプリ 41
  • 42.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito • 使用量 – 各領域のGC前後の使用量 • GCの履歴 – GC開始時間と処理時間 • 占有オブジェクト – ヒープを閉めている オブジェクトの種類 • ステータス – 処理待ちしていないか – スリープしていないか • 実行中の処理 – 実行中の処理の スタックトレース • 処理量 – 起動からの処理量 • リソース使用量 – DB接続の使用数など • メソッドの実行時間 – メソッドの呼び出しごと と累計の処理時間 監視するツールと機能 ヒープ スレッド アプリ 42 GCログ ヒープダンプ MBean プロファイラ スレッドダンプ
  • 43.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito 7.Javaの情報収集方法 43
  • 44.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito • 毎月Javaの勉強会を開催 • 年2回大規模な勉強会を開催 • Twitter @JJUG、#JJUG • 関東と関西で開催 • もくもく会と勉強会を開催 • Twitter @java_women、#javajo • 1~2ヶ月に1回 勉強会を開催 • Twitter @kan_java、#kanjava • Twitter #okajug Javaのコミュニティに参加しましょう 日本Javaユーザグループ Java女子部 関西Javaエンジニアの会 岡山Javaユーザ会 44 • Twitter #hirojug 広島Javaユーザグループ
  • 45.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito Oracleが提供するオススメの情報源 • 認定試験 – Oracle Certified Java Programmer Silver/Gold • ドキュメント – JavaMagazine (http://www.oracle.com/technetwork/java/javamagazine/index.html) • 日本語版 (http://www.oracle.com/technetwork/jp/articles/java/overview/index.html) • イベント – 国内 • Java Day Tokyo、JavaOne Tokyo、Oracle DBA & Developer Day – 海外 • JavaOne San Francisco 45
  • 46.
    Java女子部 Oracleコンサルによる超Java入門 /Hello Java / @chiroito • Java チャンピオン – Javaにおけるリーダシップの役割を持つ – Java の技術に関する啓蒙活動等を行う – 厳選されたJava のスペシャリスト • Oracle Ace – Oracleの製品に卓越した知識と経験を持つ – コミュニティ活動を強力に支援 – トップエンジニアとしてオラクルが認定 • エバンジェリスト – 技術の採用を促す広報役 – 主に、所属会社の製品や技術戦略に則って 活動し、それらをエンジニアに広める • コミッター – 製品やその機能を開発し、反映できる人 – JavaではOpenJDKや各種ライブラリ 信頼できる情報発信源から情報を得ましょう 46