Hello Java

46
Hello Java Java女子部 Oracleコンサルによる超Java入門 伊藤 智博(Chihiro Ito) Twitter : @chiroito

Transcript of Hello Java

Page 1: Hello Java

Hello Java Java女子部 Oracleコンサルによる超Java入門

伊藤 智博(Chihiro Ito) Twitter : @chiroito

Page 2: Hello Java

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

Page 3: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

ここで示されている見解は私個人のものであり

所属会社の見解を反映したものではありません

3

Page 4: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

アジェンダ

1. Javaとは

2. Java VMの内部

3. アプリケーションとJava VM

4. HotSpot JVM

5. アプリケーション開発方法

6. Java VM運用方法

7. Javaの情報収集方法 4

Page 5: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

1.Javaとは

5

Page 6: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

• Raspberry Pi

• 携帯電話

• GUI

• CUI

• 動的なサイト

• スマホアプリの通信先

Javaが使われている分野

組み込み機器 デスクトップ ブラウザ

/ スマホアプリ

実行環境

システム

■ - ×

>java Hello please Input : Java Hello Java ! >

■ - ×

6

Page 7: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

•オブジェクト指向によって

プログラミングを行う言語

•アプリケーション開発者が使用

•教材はたくさんある

• Java言語によって書かれた

アプリケーションの実行環境

•インフラ担当者が使用

•教材はほとんどない

7

Javaとは

プログラミング言語 実行環境

Page 8: Hello 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サーバ:アプリケーションサーバ

Page 9: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

実行環境のメリット

Linux用 アプリ

Linux

Solaris用 アプリ

Solaris

ネイティブの場合 環境ごとにアプリを作る

実行環境

アプリ

Linux

実行環境

Solaris

アプリ

Javaの場合 環境の差異は実行環境が吸収 →1つのアプリで良い

9

Page 10: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

アプリケーション(AP)サーバとは

• Java EEアプリケーションの実行に必要

• APサーバはJava EEによるAPIの実装を提供

•リソースを管理およびアプリケーションへ提供

–データベース接続など

•運用に必要なツールも提供

•ベンダーやオープンソースによって開発

–WebLogic Server、Oracle Application Server

–GlassFish Server

10

実行環境

アプリ

OS

APサーバ

アプリ …

Page 11: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

Javaの作られ方

•仕様の要望をJava Specification Requests(JSR)としてまとめる

• Java Community Process(JCP)の一部メンバーによって投票

–JCPメンバーにはベンダーだけではなく利用者もいる

•仕様を策定し、参照実装(RI : Reference Implementation)を作成

–製品ベンダーはこの仕様にあわせてRIを参考に開発

•互換テストにより、仕様を満たすことで認定

11

Page 12: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

さまざまな実行環境

Oracle 実行環境

(HotSpot)

アプリ

OS

Oracle 実行環境 (JRockit)

アプリ

OS

H社様 実行環境

アプリ

OS

OpenJDK (HotSpot)

アプリ

OS

I社様 実行環境

アプリ

OS

•さまざまな企業(ベンダー)やオープンソースが実装

12

•さまざまな企業(ベンダー)

Page 13: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

開発から実行するまでの流れ

開発者 アプリケーション

実行環境

13

•ソースファイル –Java言語で書かれる

•コンパイル –ソースファイルから クラスファイルを生成

•クラスファイル –実行環境が実行できる バイトコードが含まれる

実行

ソース ファイル

記述

クラス ファイル

コンパイル

Page 14: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

API

アプリケーション • Java VM –バイトコードを読み込み、 ネイティブコードへ変換して アプリケーションを実行する

–アプリケーションの実行に必要な メモリを管理する

• API –標準で含まれるクラスの集合

–Stringクラスなど

実行環境とは

クラス ファイル

実行環境

読込

クラス ファイル

クラス ファイル

クラス ファイル

14

参照

Java VM

読込

クラス ファイル

クラス ファイル

読込んだ クラス ファイル 実行

Page 15: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

2.Java VMの内部

15

Page 16: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

Java VMとは

• Java Virtual Machineの略称、更に略してJVMと呼ばれる

• javaコマンドで実行される

• OSから見るとプロセス

•ベンダーごとの実装によって細かい動きは異なる

16

Page 17: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

Java VMの役割

•アプリケーションを動かす

•アプリケーションのサポート

–アプリケーションの実行に必要なクラスファイルを読込む

–バイトコードをネイティブコードへ変換・最適化

–オブジェクトの終了処理

–アプリケーションが使用したメモリの掃除(ガベージ・コレクション)

–など

17

Page 18: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

Java VMの構成要素

•スレッド –与えられた仕事を実行する

–OSのCPUリソースを使用

•メモリ領域 –スレッドが作業領域として使用

–OSのメモリリソースを使用

18

メモリ領域

JVMプロセス スレッド

Page 19: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

メモリ領域

Java VMが持つ2種類のスレッド

•アプリケーションスレッド

–アプリケーションを動かす

–開発者が作成・管理可能

• VMスレッド

–アプリケーションをサポートする

–開発者は気にしない

19

JVMプロセス VM アプリケーション

Page 20: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

メモリ領域

いろいろな役割のVMスレッド

•スレッドによって役割がある

–ガベージ・コレクション スレッド

–コンパイル スレッド

–ファイナライザ スレッド

20

JVMプロセス アプリケーション GC担当

コンパイル担当

VM

など

Page 21: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

Java VMのメモリ構造

•メモリ領域は2種類

–ヒープ領域

• アプリケーションのオブジェクトを格納

• アプリケーションがnewすると使用

• 開発者はオブジェクトの削除を意識不要

–ネイティブ領域

• Java VM自身が使用するメモリ空間

21

メモリ領域

JVMプロセス

ネイティブ ヒープ

VM アプリケーション

abc

new GC

Page 22: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

Java VMのネイティブ領域

• JVM内部で使用

•他にもさまざまな用途で使用

–スレッドスタック

• スレッドが処理中の情報を格納

–メタスペース

• 読込んだクラスの情報を格納

22

JVMプロセス

ネイティブ ヒープ

VM アプリケーション

スレッド スタック

処理中の 情報を記録

Page 23: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

3.アプリケーションとJava VM

23

Page 24: Hello Java

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

Page 25: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

アプリケーションをサポートする機能例

•ガベージ・コレクション

–ヒープ領域にある使われないオブジェクトを削除する

–GCスレッドによって実行される

–実行中はアプリケーションが停止する(Stop The World : STW)

25

Page 26: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

アプリケーションとGC

String s = new String(“abc”);

s = null ;

メモリ

abc s 参照 参照があるため

GC対象ではない

メモリ

abc s

参照を削除 参照がないため GC対象

26

Page 27: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

4.HotSpot JVM

27

Page 28: Hello Java

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 領域

Page 29: Hello Java

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

Page 30: Hello Java

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

Page 31: Hello Java

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

Page 32: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

5.Javaアプリケーションの開発方法

32

Page 33: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

開発には Java Development Kit を使用

• Java用のソフトウェア開発キット(SDK)

• Java Development Kit(JDK)の構成要素

–実行環境(JRE)

–開発ツール:コンパイラ、アーカイブ、ドキュメント生成

–運用ツール:分析ツール、監視ツール

33

Page 34: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

アプリケーション開発で扱う3種類のファイル

•ソースファイル (*.java) –開発者がJava言語で作成するファイル

•クラスファイル (*.class) –JVMが実行可能なバイトコードを含むファイル

•アーカイブファイル (*.jar, *.war, *.ear) –クラスファイルをまとめたファイル

34

Page 35: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 35

アプリケーション開発の流れ

ソース ファイル

クラス ファイル

アーカイブ ファイル

記述 実行 実行 コンパイル アーカイブ

•実行はクラスファイルとアーカイブファイルのどちらでも可能

Page 36: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

昔のアプリケーション開発の流れ

•エディタ(メモ帳など)を使用してソースファイルを作成

• JDKを直接使用してクラスファイル・アーカイブファイルを作成

36

ソース ファイル

クラス ファイル

アーカイブ ファイル

javacコマンド jarコマンド

エディタ JDK

実行

Page 37: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

IDEを使ったアプリケーション開発の流れ

•統合開発環境:Integrated Development Environment (IDE) –Eclipse, Netbeans, JDeveloper など

–アプリケーション開発に必要な機能がまとめられている

37

ソース ファイル

クラス ファイル

アーカイブ ファイル

Run

保存/ビルド エクスポート

IDEを使った開発

記述 実行

Page 38: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

商用で使われるアプリケーション開発の流れ(例)

• CIツール –継続的にテストやビルドを繰返し、品質管理を行うツール

–ビルドツールを使用してコンパイルやアーカイブを行う

38

ソース ファイル

クラス ファイル

アーカイブ ファイル

実行 コンパイル アーカイブ

IDE CIツール

Page 39: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

6.Java VMの運用方法

39

Page 40: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

なぜ監視するのか

•アプリケーションとJVMが動けているか確認

–OSリソース/APサーバ/Java VM/アプリケーションのリソースの過不足

–アプリケーションが動かず、Java VMばかり動いていないか

–アプリケーションやJava VMが無駄な処理をしていないか

40

Page 41: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

• 使用量

– 各領域のGC前後の使用量

• GCの履歴

– GC開始時間と処理時間

• 占有オブジェクト

– ヒープを閉めている オブジェクトの種類

• ステータス

– 処理待ちしていないか

– スリープしていないか

• 実行中の処理

– 実行中の処理の

スタックトレース

• 処理量

– 起動からの処理量

• リソース使用量

– DB接続の使用数など

• メソッドの実行時間

– メソッドの呼び出しごとと累計の処理時間

監視する項目

ヒープ スレッド アプリ

41

Page 42: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

• 使用量

– 各領域のGC前後の使用量

• GCの履歴

– GC開始時間と処理時間

• 占有オブジェクト

– ヒープを閉めている オブジェクトの種類

• ステータス

– 処理待ちしていないか

– スリープしていないか

• 実行中の処理

– 実行中の処理の

スタックトレース

• 処理量

– 起動からの処理量

• リソース使用量

– DB接続の使用数など

• メソッドの実行時間

– メソッドの呼び出しごとと累計の処理時間

監視するツールと機能

ヒープ スレッド アプリ

42

GCログ

ヒープダンプ

MBean

プロファイラ

スレッドダンプ

Page 43: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

7.Javaの情報収集方法

43

Page 44: Hello Java

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ユーザグループ

Page 45: Hello 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

Page 46: Hello Java

Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito

• Java チャンピオン – Javaにおけるリーダシップの役割を持つ

– Java の技術に関する啓蒙活動等を行う

– 厳選されたJava のスペシャリスト

•Oracle Ace – Oracleの製品に卓越した知識と経験を持つ

– コミュニティ活動を強力に支援

– トップエンジニアとしてオラクルが認定

•エバンジェリスト – 技術の採用を促す広報役

– 主に、所属会社の製品や技術戦略に則って活動し、それらをエンジニアに広める

•コミッター – 製品やその機能を開発し、反映できる人

– JavaではOpenJDKや各種ライブラリ

信頼できる情報発信源から情報を得ましょう

46