Hello Java
-
Upload
chihiro-ito -
Category
Technology
-
view
2.776 -
download
0
Transcript of Hello Java
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
String String
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 ;
メモリ
abc s 参照 参照があるため
GC対象ではない
メモリ
abc s
参照を削除 参照がないため 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 2 3
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