Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

Hello Java

5 829 vues

Publié le

Java女子部 Oracleコンサルによる超Java入門
https://javajo.doorkeeper.jp/events/29534
https://javajo.doorkeeper.jp/events/29535

本資料は2015/08/29日にJava女子部で使用した資料です。
Javaをはじめて2年未満の方をターゲットとしています。

Publié dans : Technologie
  • Login to see the comments

Hello Java

  1. 1. Hello Java Java女子部 Oracleコンサルによる超Java入門 伊藤 智博(Chihiro Ito) Twitter : @chiroito
  2. 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. 3. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito ここで示されている見解は私個人のものであり 所属会社の見解を反映したものではありません 3
  4. 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. 5. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 1.Javaとは 5
  6. 6. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito • Raspberry Pi • 携帯電話 • GUI • CUI • 動的なサイト • スマホアプリの通信先 Javaが使われている分野 組み込み機器 デスクトップ ブラウザ / スマホアプリ 実行環境 システム ■ - × >java Hello please Input : Java Hello Java ! > ■ - × 6
  7. 7. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito • オブジェクト指向によって プログラミングを行う言語 • アプリケーション開発者が使用 • 教材はたくさんある • Java言語によって書かれた アプリケーションの実行環境 • インフラ担当者が使用 • 教材はほとんどない 7 Javaとは プログラミング言語 実行環境
  8. 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. 9. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 実行環境のメリット Linux用 アプリ Linux Solaris用 アプリ Solaris ネイティブの場合 環境ごとにアプリを作る 実行環境 アプリ Linux 実行環境 Solaris アプリ Javaの場合 環境の差異は実行環境が吸収 →1つのアプリで良い 9
  10. 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. 11. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito Javaの作られ方 • 仕様の要望をJava Specification Requests(JSR)としてまとめる • Java Community Process(JCP)の一部メンバーによって投票 – JCPメンバーにはベンダーだけではなく利用者もいる • 仕様を策定し、参照実装(RI : Reference Implementation)を作成 – 製品ベンダーはこの仕様にあわせてRIを参考に開発 • 互換テストにより、仕様を満たすことで認定 11
  12. 12. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito さまざまな実行環境 Oracle 実行環境 (HotSpot) アプリ OS Oracle 実行環境 (JRockit) アプリ OS H社様 実行環境 アプリ OS OpenJDK (HotSpot) アプリ OS I社様 実行環境 アプリ OS • さまざまな企業(ベンダー)やオープンソースが実装 12 • さまざまな企業(ベンダー)
  13. 13. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 開発から実行するまでの流れ 開発者 アプリケーション 実行環境 13 • ソースファイル – Java言語で書かれる • コンパイル – ソースファイルから クラスファイルを生成 • クラスファイル – 実行環境が実行できる バイトコードが含まれる 実行 ソース ファイル 記述 クラス ファイル コンパイル
  14. 14. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito API アプリケーション • Java VM – バイトコードを読み込み、 ネイティブコードへ変換して アプリケーションを実行する – アプリケーションの実行に必要な メモリを管理する • API – 標準で含まれるクラスの集合 – Stringクラスなど 実行環境とは クラス ファイル 実行環境 読込 クラス ファイル クラス ファイル クラス ファイル 14 参照 Java VM 読込 クラス ファイル クラス ファイル 読込んだ クラス ファイル 実行
  15. 15. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 2.Java VMの内部 15
  16. 16. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito Java VMとは • Java Virtual Machineの略称、更に略してJVMと呼ばれる • javaコマンドで実行される • OSから見るとプロセス • ベンダーごとの実装によって細かい動きは異なる 16
  17. 17. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito Java VMの役割 • アプリケーションを動かす • アプリケーションのサポート – アプリケーションの実行に必要なクラスファイルを読込む – バイトコードをネイティブコードへ変換・最適化 – オブジェクトの終了処理 – アプリケーションが使用したメモリの掃除(ガベージ・コレクション) – など 17
  18. 18. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito Java VMの構成要素 • スレッド – 与えられた仕事を実行する – OSのCPUリソースを使用 • メモリ領域 – スレッドが作業領域として使用 – OSのメモリリソースを使用 18 メモリ領域 JVMプロセス スレッド
  19. 19. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito メモリ領域 Java VMが持つ2種類のスレッド • アプリケーションスレッド – アプリケーションを動かす – 開発者が作成・管理可能 • VMスレッド – アプリケーションをサポートする – 開発者は気にしない 19 JVMプロセス VMアプリケーション
  20. 20. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito メモリ領域 いろいろな役割のVMスレッド • スレッドによって役割がある – ガベージ・コレクション スレッド – コンパイル スレッド – ファイナライザ スレッド 20 JVMプロセス アプリケーションGC担当 コンパイル 担当 VM など
  21. 21. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito Java VMのメモリ構造 • メモリ領域は2種類 – ヒープ領域 • アプリケーションのオブジェクトを格納 • アプリケーションがnewすると使用 • 開発者はオブジェクトの削除を意識不要 – ネイティブ領域 • Java VM自身が使用するメモリ空間 21 メモリ領域 JVMプロセス ネイティブヒープ VMアプリケーション abc new GC
  22. 22. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito Java VMのネイティブ領域 • JVM内部で使用 • 他にもさまざまな用途で使用 – スレッドスタック • スレッドが処理中の情報を格納 – メタスペース • 読込んだクラスの情報を格納 22 JVMプロセス ネイティブヒープ VMアプリケーション スレッド スタック 処理中の 情報を記録
  23. 23. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 3.アプリケーションとJava VM 23
  24. 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. 25. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito アプリケーションをサポートする機能例 • ガベージ・コレクション – ヒープ領域にある使われないオブジェクトを削除する – GCスレッドによって実行される – 実行中はアプリケーションが停止する(Stop The World : STW) 25
  26. 26. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito アプリケーションとGC String s = new String(“abc”); s = null ; メモリ abcs 参照 参照があるため GC対象ではない メモリ abcs 参照を削除 参照がないため GC対象 26
  27. 27. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 4.HotSpot JVM 27
  28. 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. 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. 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. 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. 32. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 5.Javaアプリケーションの開発方法 32
  33. 33. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 開発には Java Development Kit を使用 • Java用のソフトウェア開発キット(SDK) • Java Development Kit(JDK)の構成要素 – 実行環境(JRE) – 開発ツール:コンパイラ、アーカイブ、ドキュメント生成 – 運用ツール:分析ツール、監視ツール 33
  34. 34. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito アプリケーション開発で扱う3種類のファイル • ソースファイル (*.java) – 開発者がJava言語で作成するファイル • クラスファイル (*.class) – JVMが実行可能なバイトコードを含むファイル • アーカイブファイル (*.jar, *.war, *.ear) – クラスファイルをまとめたファイル 34
  35. 35. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 35 アプリケーション開発の流れ ソース ファイル クラス ファイル アーカイブ ファイル 記述 実行実行コンパイル アーカイブ • 実行はクラスファイルとアーカイブファイルのどちらでも可能
  36. 36. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 昔のアプリケーション開発の流れ • エディタ(メモ帳など)を使用してソースファイルを作成 • JDKを直接使用してクラスファイル・アーカイブファイルを作成 36 ソース ファイル クラス ファイル アーカイブ ファイル javacコマンド jarコマンド エディタ JDK 実行
  37. 37. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito IDEを使ったアプリケーション開発の流れ • 統合開発環境:Integrated Development Environment (IDE) – Eclipse, Netbeans, JDeveloper など – アプリケーション開発に必要な機能がまとめられている 37 ソース ファイル クラス ファイル アーカイブ ファイル Run保存/ビルド エクスポート IDEを使った開発 記述 実行
  38. 38. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 商用で使われるアプリケーション開発の流れ(例) • CIツール – 継続的にテストやビルドを繰返し、品質管理を行うツール – ビルドツールを使用してコンパイルやアーカイブを行う 38 ソース ファイル クラス ファイル アーカイブ ファイル 実行コンパイル アーカイブ IDE CIツール
  39. 39. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 6.Java VMの運用方法 39
  40. 40. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito なぜ監視するのか • アプリケーションとJVMが動けているか確認 – OSリソース/APサーバ/Java VM/アプリケーションのリソースの過不足 – アプリケーションが動かず、Java VMばかり動いていないか – アプリケーションやJava VMが無駄な処理をしていないか 40
  41. 41. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito • 使用量 – 各領域のGC前後の使用量 • GCの履歴 – GC開始時間と処理時間 • 占有オブジェクト – ヒープを閉めている オブジェクトの種類 • ステータス – 処理待ちしていないか – スリープしていないか • 実行中の処理 – 実行中の処理の スタックトレース • 処理量 – 起動からの処理量 • リソース使用量 – DB接続の使用数など • メソッドの実行時間 – メソッドの呼び出しごと と累計の処理時間 監視する項目 ヒープ スレッド アプリ 41
  42. 42. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito • 使用量 – 各領域のGC前後の使用量 • GCの履歴 – GC開始時間と処理時間 • 占有オブジェクト – ヒープを閉めている オブジェクトの種類 • ステータス – 処理待ちしていないか – スリープしていないか • 実行中の処理 – 実行中の処理の スタックトレース • 処理量 – 起動からの処理量 • リソース使用量 – DB接続の使用数など • メソッドの実行時間 – メソッドの呼び出しごと と累計の処理時間 監視するツールと機能 ヒープ スレッド アプリ 42 GCログ ヒープダンプ MBean プロファイラ スレッドダンプ
  43. 43. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito 7.Javaの情報収集方法 43
  44. 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. 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. 46. Java女子部 Oracleコンサルによる超Java入門 / Hello Java / @chiroito • Java チャンピオン – Javaにおけるリーダシップの役割を持つ – Java の技術に関する啓蒙活動等を行う – 厳選されたJava のスペシャリスト • Oracle Ace – Oracleの製品に卓越した知識と経験を持つ – コミュニティ活動を強力に支援 – トップエンジニアとしてオラクルが認定 • エバンジェリスト – 技術の採用を促す広報役 – 主に、所属会社の製品や技術戦略に則って 活動し、それらをエンジニアに広める • コミッター – 製品やその機能を開発し、反映できる人 – JavaではOpenJDKや各種ライブラリ 信頼できる情報発信源から情報を得ましょう 46

×