SlideShare a Scribd company logo
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

More Related Content

PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
PDF
マルチテナントのアプリケーション実装〜実践編〜
PDF
Unified JVM Logging
PDF
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
PDF
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
PDF
コンテナ時代にインフラエンジニアは何をするのか
PDF
JVMのGCアルゴリズムとチューニング
PDF
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
Javaはどのように動くのか~スライドでわかるJVMの仕組み
マルチテナントのアプリケーション実装〜実践編〜
Unified JVM Logging
Amazon Game Tech Night #25 ゲーム業界向け機械学習最新状況アップデート
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
コンテナ時代にインフラエンジニアは何をするのか
JVMのGCアルゴリズムとチューニング
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)

What's hot (20)

PDF
ユーザーストーリー駆動開発で行こう。
PDF
プログラムの処方箋~健康なコードと病んだコード
PDF
継続的なモデルモニタリングを実現するKubernetes Operator
PDF
金勘定のためのBigDecimalそしてMoney and Currency API
PPTX
さくっと理解するSpring bootの仕組み
PDF
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
PDF
30分でわかるマイクロサービスアーキテクチャ 第2版
PDF
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
PDF
ディープラーニングのフレームワークと特許戦争
PPTX
BuildKitによる高速でセキュアなイメージビルド
PDF
マルチテナント化で知っておきたいデータベースのこと
PDF
ZOZOTOWNのアーキテクトという役割を紹介します
PDF
40歳過ぎてもエンジニアでいるためにやっていること
PDF
Java仮想マシンの実装技術
PDF
ゼロからはじめるKVM超入門
PPTX
分散トレーシングAWS:X-Rayとの上手い付き合い方
PDF
ドメイン駆動設計のための Spring の上手な使い方
PDF
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
PDF
serviceクラスをやめようサブクラスを使おう
PPTX
インセプションデッキ: やらないことリストと トレードオフスライダーをやってる話
ユーザーストーリー駆動開発で行こう。
プログラムの処方箋~健康なコードと病んだコード
継続的なモデルモニタリングを実現するKubernetes Operator
金勘定のためのBigDecimalそしてMoney and Currency API
さくっと理解するSpring bootの仕組み
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
30分でわかるマイクロサービスアーキテクチャ 第2版
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
ディープラーニングのフレームワークと特許戦争
BuildKitによる高速でセキュアなイメージビルド
マルチテナント化で知っておきたいデータベースのこと
ZOZOTOWNのアーキテクトという役割を紹介します
40歳過ぎてもエンジニアでいるためにやっていること
Java仮想マシンの実装技術
ゼロからはじめるKVM超入門
分散トレーシングAWS:X-Rayとの上手い付き合い方
ドメイン駆動設計のための Spring の上手な使い方
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
serviceクラスをやめようサブクラスを使おう
インセプションデッキ: やらないことリストと トレードオフスライダーをやってる話
Ad

Viewers also liked (18)

PDF
2015/11/15 Javaでwebアプリケーション入門
PDF
講座Java入門
PDF
Javaプログラミングをスッキリ学ぶ10のコツ
PDF
Jvm言語とJava、切っても切れないその関係
PDF
Java SE 再入門
PPTX
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
PDF
JPAのキャッシュを使ったアプリケーション高速化手法
PDF
Java Flight Recorderの紹介 at Java Day Tokyo 2015
PDF
Java による Web アプリケーションのプロトタイプのために最近使っている構成
PPT
13 java in oracle
PDF
OpenStack Grizzly Release
PPTX
Java EE 7 multi factor authentiaction with Microsoft Azure AD
PPTX
xUnitハンズオン第3回テキスト
PPTX
xUnitハンズオン第1回テキスト
PPTX
xUnitハンズオン第2回テキスト
PPTX
xUnitハンズオン第4回テキスト
PPTX
TypeScriptハンズオン第2回テキスト
PPT
外資系コンサルの仕事を片づける技術 「相手に合わせて柔軟に対応する」具体例
2015/11/15 Javaでwebアプリケーション入門
講座Java入門
Javaプログラミングをスッキリ学ぶ10のコツ
Jvm言語とJava、切っても切れないその関係
Java SE 再入門
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JPAのキャッシュを使ったアプリケーション高速化手法
Java Flight Recorderの紹介 at Java Day Tokyo 2015
Java による Web アプリケーションのプロトタイプのために最近使っている構成
13 java in oracle
OpenStack Grizzly Release
Java EE 7 multi factor authentiaction with Microsoft Azure AD
xUnitハンズオン第3回テキスト
xUnitハンズオン第1回テキスト
xUnitハンズオン第2回テキスト
xUnitハンズオン第4回テキスト
TypeScriptハンズオン第2回テキスト
外資系コンサルの仕事を片づける技術 「相手に合わせて柔軟に対応する」具体例
Ad

Similar to Hello Java (20)

PDF
20150829 Java女子部勉強会 Java EEハンズオン
PPTX
私とJava女子部
PDF
Javaはコミュニティの力で再び偉大になれるのか
KEY
関ジャバ JavaOne Tokyo 2012報告会
PDF
20120906 Javaはオワコンなのか自問してみた
KEY
PlayFramework1.x基礎編
PDF
JVMの中身を可視化してみた
PDF
Javaのカルチャーとグロース - MANABIYA 2018
PDF
夏だからJava再入門
PDF
Java女子部 Java EEハンズオン(応用編)
PDF
Javaに関する様々なトピック
PDF
Javaの登場と発展
PDF
20161111 java one2016-feedback
PDF
Java によるクラウドネイティブ の実現に向けて
PDF
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
PPT
第1回java実習(helloworld)2011
PDF
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
PPTX
ななめ45°から見たJavaOne
PPTX
福井イベント
PDF
PHPからJavaへ乗り換えた。そんな昔話をしよう
20150829 Java女子部勉強会 Java EEハンズオン
私とJava女子部
Javaはコミュニティの力で再び偉大になれるのか
関ジャバ JavaOne Tokyo 2012報告会
20120906 Javaはオワコンなのか自問してみた
PlayFramework1.x基礎編
JVMの中身を可視化してみた
Javaのカルチャーとグロース - MANABIYA 2018
夏だからJava再入門
Java女子部 Java EEハンズオン(応用編)
Javaに関する様々なトピック
Javaの登場と発展
20161111 java one2016-feedback
Java によるクラウドネイティブ の実現に向けて
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
第1回java実習(helloworld)2011
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
ななめ45°から見たJavaOne
福井イベント
PHPからJavaへ乗り換えた。そんな昔話をしよう

More from Chihiro Ito (11)

PDF
Red Hat Data Grid 8.2 新機能
PDF
Red Hat Data Grid 8.1 新機能
PDF
Quarkus Technical Deep Dive - Japanese
PDF
Advanced database monitoring in modern java
PDF
システムのモダナイズ 落ちても良いアプリの作り方
PDF
Quarkusのビジネスと技術的な価値
PDF
Quarkus による超音速な Spring アプリケーション開発
PDF
Oracle code one 2018 報告会概要
PDF
Getting started MySQL as Document Data Store
PDF
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
PDF
JDKツール使ってますか
Red Hat Data Grid 8.2 新機能
Red Hat Data Grid 8.1 新機能
Quarkus Technical Deep Dive - Japanese
Advanced database monitoring in modern java
システムのモダナイズ 落ちても良いアプリの作り方
Quarkusのビジネスと技術的な価値
Quarkus による超音速な Spring アプリケーション開発
Oracle code one 2018 報告会概要
Getting started MySQL as Document Data Store
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
JDKツール使ってますか

Hello Java

  • 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