SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
Javaはどのように動くのか
~スライドでわかるJVMの仕組み

      伊藤 智博




                   1
ここで示されている見解は私個人の
ものであり、所属会社の見解を反映
したものではありません



                   2
目次


    •   自己紹介
    •   はじめに
    •   ヒープ
    •   スレッド
    •   メモリリーク
    •   ファイナライザ

3
自己紹介

• 名前:
 – 伊藤 智博(いとう ちひろ)
• 勤務先:
 – 日本オラクル株式会社
• 仕事で使う製品:
 – Coherence, Java EE/SE/ME, JVM, Database
• 連載:
 – Javaはどのように動くのか~図解でわかるJVMの仕組み
 – http://gihyo.jp/dev/serial/01/jvm-arc

                                             4
はじめに




5
JVMって何なの?

• Java仮想マシン(JVM)
  – Javaバイトコードを実行するスタック型の仮想マシン
  – APIやツールのセットでJava実行環境(JRE)
  – この環境を移植することで、様々な環境でJavaを実行できる
• JDK(Java開発キット)
  – プライベートJREや開発ツールで構成されている
  – サンプルソースが含まれている          wikipediaより抜粋

          JDK
                      JRE
                開発          実行
                ツール         環境         6
JVMにはどんなのがあるの?

• Hotspot
  – 旧Sunが開発を行っていたJVM
  – 一般的にJVMと言ったらこれ。


• JRockit
  – 旧BEAが開発を行っていたJVM
  – サーバ用にいろいろされている。

• ほかにもいろいろな会社さんがリリースしてます
                             7
開発から実行まで

 •   開発者がソースコードを書く
 •   javacでコンパイルして、クラスファイルを生成
 •   クラスファイルをロードする
 •   ネイティブコードを生成&実行
                            java
                      クラス                      ネイティブ
      ソース   コンパイル                               コード
      コード            ファイル    ロード
             javac                   変換
                                   JVM
      コーディング                              実行

開発者                                                    8
主なメモリ空間

• スレッドスタック           JVM
  – スレッドの情報が入る        メモリ空間
• Cヒープ                  スレッド
                               Cヒープ
                                       Java
                        スタック          ヒープ
  – JVMがいろいろ使う
• Javaヒープ
  – アプリがいろいろ使う
              Java     JVMと選択したGCに
             ヒープ        よって形が変わる

   若い世代     古い世代      古い世代
                                              9
連載ではこんなふうに例えています

•   OSのメモリ空間は『地面』
•   OSからJVMに割り当てられるメモリ空間が『敷地』
•   Javaヒープが『建物』
•   Javaヒープ以外のメモリ空間が『庭』

                              Javaヒープ
    Javaヒープ以外
                 庭     建物
JVMのメモリ空間                       OSのメモリ空間
            JVM
             メモリ空間
               スレッド           Java
                      Cヒープ                 10
               スタック          ヒープ
実際の大きさを測るには

 • 敷地のサイズは今や無限のようなもの
 • 処理によっては庭がガンガン大きくなっていくことも
 • 建物は固定サイズおすすめ
                               建物サイズ(抜粋)
庭サイズ
                               jstat -gccapacity 5908
 庭=敷地-建物                       NGC      OGC    PGC
                               43072.0 86144.0 21248.0
                      庭   建物

           敷地サイズ(抜粋)
           ps u –P 5908
           VSZ
           116472                                        11
ヒープ




12
巨大オブジェクトのサンプルソース

• 25,000,000個のint配列を作成し、最後にHelloを出力します
  – (4byte*25M個の配列=約100Mbyte)

  Create100mObject.java
  public class Create100mObject {
   public static void main(String[] args) {
          int[] a = new int[25000000];
          System.out.println("Hello.");
      }
  }                                           13
オブジェクトを作成してみよう(1)

• 実行してみると、
• 約100Mbyteの配列が作成され、Helloが出力されました。
>java Create100mObject
Hello.


                         new   アプリの処理スレッドはnew
                               によって建物にオブジェクト
         庭          建物         を生成します。


                                                14
オブジェクトを作成してみよう(2)

 • ヒープのサイズを64MBにして実行してみます。

>java Create100mObject -Xmx64m –Xms64m
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at Create100mObject.main(Create100mObject.java:3)

エラー発生!!
      new                        建物に入りきらないオブジェクト
    建物                           は格納できず、OOMEが発生し
                                 ます。
                                                                         15
スレッド




16
スレッド

• JVMはメモリの他にスレッドというものも持っています
• スレッドには処理が定義されていてそれを実行します。

私はアプリを動    僕はGCします
かします
      庭   建物     敷地には何人かの人が居ます。
                 この人達は、それぞれ何かし
                 らの役割を持っています。


                                  17
スレッドダンプ

• Jstackによるスレッドダンプを取得
>jstack 10104
2013-02-22 18:13:51
Full thread dump Java HotSpot(TM) 64-Bit Server VM (23.7-b01 mixed mode):
"Service Thread" daemon prio=6 tid=0x000000000bb4f800 nid=0x2aa4 runnable [0x0000000000000000]
  java.lang.Thread.State: RUNNABLE
"C2 CompilerThread1" daemon prio=10 tid=0x000000000bb4a800 nid=0x208c waiting on condition [0x0000000000000000]
  java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" daemon prio=10 tid=0x000000000bb36800 nid=0x1e3c waiting on condition [0x0000000000000000]
  java.lang.Thread.State: RUNNABLE
"Attach Listener" daemon prio=10 tid=0x000000000bb36000 nid=0xe58 waiting on condition [0x0000000000000000]
  java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=10 tid=0x000000000bb2f000 nid=0x2210 runnable [0x0000000000000000]
  java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=8 tid=0x00000000024ac800 nid=0x1fbc in Object.wait() [0x000000000ccce000]
  java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on <0x00000007d5eb5798> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
      - locked <0x00000007d5eb5798> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
      at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)
"Reference Handler" daemon prio=10 tid=0x00000000024a4800 nid=0x1f90 in Object.wait() [0x000000000cddf000]
  java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on <0x00000007d5eb5320> (a java.lang.ref.Reference$Lock)
      at java.lang.Object.wait(Object.java:503)
      at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
      - locked <0x00000007d5eb5320> (a java.lang.ref.Reference$Lock)
"main" prio=6 tid=0x000000000256e000 nid=0x2888 waiting on condition [0x00000000028df000]
  java.lang.Thread.State: TIMED_WAITING (sleeping)
      at java.lang.Thread.sleep(Native Method)
      at ThreadSleep.main(ThreadSleep.java:9)
"VM Thread" prio=10 tid=0x000000000ba92000 nid=0x1e98 runnable
"GC task thread#0 (ParallelGC)" prio=6 tid=0x00000000023f4000 nid=0x2a6c runnable
"GC task thread#1 (ParallelGC)" prio=6 tid=0x00000000023f5800 nid=0x2204 runnable
"VM Periodic Task Thread" prio=10 tid=0x000000000bb60800 nid=0x2738 waiting on condition
JNI global references: 110
                                                                                                                  18
スレッドダンプ(抜粋)

     •   コンパイラスレッドが2つ "C2 CompilerThreadn”
     •   ファイナライザスレッドが1つ ”Finalizer”
     •   アプリを実行するスレッドが1つ ”main”
     •   GCスレッドが2つ ”GC task thread#n (ParallelGC)”
               >jstack 10104
               "C2 CompilerThread1” java.lang.Thread.State: RUNNABLE
コンパイラ          "C2 CompilerThread0” java.lang.Thread.State: RUNNABLE
ファイナライザ        "Finalizer” java.lang.Thread.State: WAITING (on object monitor)
アプリ            "main” java.lang.Thread.State: TIMED_WAITING (sleeping)
               "GC task thread#0 (ParallelGC)“ runnable
GC             "GC task thread#1 (ParallelGC)“ runnable
                                                                            19
メモリリーク




20
メモリリークとは?

• オブジェクトが必要無いのに参照されてしまい、
  GCされても削除されずに残ってしまうこと。

               不要になったオブジェクト

                            参照されてるからあ
               参照        GC のオブジェクトは消
必要無いのに参照が
残ってしまい、オブジェク
                    建物      せないなぁ
トがGC対象にならない

                                   21
メモリリークはダメなのか?

• メモリリークが起きるとどうなるのか?
  – ヒープを圧迫する
  – プログラムが想定外の動きをすることも(=バグ)


使える領域が狭い         アプリが使える領域
気がするけど、な
ぜ?                             不要なのに参照が
                               残っているオブジェ
                     建物        クトがヒープを圧迫
頻繁に働いてる気
がする・・・                    不要なオブジェクト
            GC                             22
インターフェース Map<K,V>

• V put(K key, V value)
     – 概要
        • 指定された値と指定されたキーをこのマップに関連付けます
          (任意のオペレーション)。マップにすでにこのキーに対する
          マッピングがある場合、古い値は指定された値に置き換えられ
          ます。m.containsKey(k) が true を返す場合に限り、マッ
          プ m は、キー k のマッピングを含むと言えます。
     – パラメータ:
        • key : 指定された値が関連付けられるキー
        • value : 指定されたキーに関連付けられる値
     – 戻り値:
        • key に以前に関連付けられていた値。key のマッピングが存在
          しなかった場合は null。
Java 7では日本語が無かったので6から抜粋                                               23
http://docs.oracle.com/javase/jp/6/api/java/util/Map.html#put(K, V)
Map put(K,V)のイメージ


                      HashMapオブジェクト

put( key, value )

             valueの値を格納


      keyの値によって
      格納場所が決まる                        24
メモリリークのサンプルソース(1)

• Mapのキーとなるクラス
• フィールド i が同じオブジェクトは同じキーとしたい
 MemLeak.java
  public class MemLeak {
   int i;
      public MemLeak(int i){
        this.i = i;
      }
  }
                               25
メモリリークのサンプルソース(2)

•  部分でputしたオブジェクトを 部分でどんどん上書き
• 最後にMapクラスの c に入っているデータの数を出力
  MemLeak.java(メイン処理部分)
  public static void main(String[] args) {
   Map<MemLeak,Object> c = new HashMap();
      c.put(new MemLeak( 1 ),new Object());
      for(int i = 0 ; i < 100; i++){
       c.put(new MemLeak( 1 ),new Object());
      }
      System.out.println(c.size());
  }                                            26
問題

• このmainメソッドを実行すると何が出力されるでしょ
  うか?

•   A. 1が出力される
•   B. 100が出力される
•   C. 101が出力される
•   D. 実行時エラーになる
•   E. その他
                               27
メモリリークを起こしてみよう

>java MemLeak
101

• 正解は、Cの101

• 今回の問題は、同値の判定を行っていないため。
• hashCode()とequals(Object)を修正します



                                    28
メモリリークの修正例
 MemLeak.java(一部抜粋)
 @Override
 public int hashCode(){
   return this.i;
 }
 @Override
 public boolean equals(Object o){
   MemLeak a = (MemLeak)o;
   return (this.i == a.i);
 }

>java MemLeak
1                                   29
ファイナライザ




30
ファイナライザとは?

• 全参照が削除されたオブジェクトは次回のGCで削除
• GCの前にfinalize()が実行されます。
 – 基本的にfinalize()は何も処理は行われません
• finalize()が実行されたオブジェクトはGCで回収
                                                ②
                 ファイナライザ もう要らないので
                          finalize()メソッドを
 ①             finalize()
                          実行します
     参照を削除
                                            ③
               建物           finalize()された
                            ので回収します                 31
ファイナライザのサンプルソース(1)

• finalize()の中で処理を1秒間止めます
  Fin.java
  public class Fin{
   public void finalize() {
    try {
           Thread.currentThread().sleep(1000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
      }
                                                 32
  }
ファイナライザのサンプルソース(2)

• Finクラスのオブジェクトを大量に生成します
 Fin.java(メイン処理部分)
  public static void main(String[] args) {
      for (;;) {
          new Fin();
      }
  }


                                             33
実行してみよう

• Finオブジェクトを大量に生成
• FinオブジェクトはGC前にfinalize()でスレッドが1秒間停止
• すると・・・




                                        34
ファイナライザが終わらないとこうなる

>java Fin -Xmx64m –Xms64m
Exception: java.lang.OutOfMemoryError thrown from the
UncaughtExceptionHandler in thread "main"


ヒープに空きが無い                   不要なオブジェクト
からオブジェクトが                                               ファイナライザが終
作れない・・・                                                 わらないから回収
                                                        できないなぁ
  finalize()が終わ
  らない・・・                          建物
                                                                35
まとめ

• 動きを知ると問題が起きても解決が早くなります
• 特定のJVM固有の知識も必要だが、
  種類に問われない汎用的な知識も必要




                           36

Mais conteúdo relacionado

Mais procurados

コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
Akkaで分散システム入門
Akkaで分散システム入門Akkaで分散システム入門
Akkaで分散システム入門Shingo Omura
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術Kiyokuni Kawachiya
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春VerMasahito Zembutsu
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...NTT DATA Technology & Innovation
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...NTT DATA Technology & Innovation
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~NTT DATA OSS Professional Services
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)NTT DATA Technology & Innovation
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具yoku0825
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 

Mais procurados (20)

コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
Akkaで分散システム入門
Akkaで分散システム入門Akkaで分散システム入門
Akkaで分散システム入門
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
 
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
Apache Kafkaって本当に大丈夫?~故障検証のオーバービューと興味深い挙動の紹介~
 
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
オススメのJavaログ管理手法 ~コンテナ編~(Open Source Conference 2022 Online/Spring 発表資料)
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 

Semelhante a Javaはどのように動くのか~スライドでわかるJVMの仕組み

Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageTaku Miyakawa
 
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]David Buck
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiKen'ichi Sakiyama
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会Koichi Sakata
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京hecomi
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようAkira Shimosako
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...Naoya Ito
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみたKengo Toda
 
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]David Buck
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)Akihiro Kuwano
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!YujiSoftware
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsuNanha Park
 

Semelhante a Javaはどのように動くのか~スライドでわかるJVMの仕組み (20)

つぶLT20121215
つぶLT20121215つぶLT20121215
つぶLT20121215
 
Kink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based languageKink: invokedynamic on a prototype-based language
Kink: invokedynamic on a prototype-based language
 
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
Java Concurrency, A(nother) Peek Under the Hood [Java Day Tokyo 2016 3-C]
 
Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
 
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
Hello, C++ + JavaScript World! - Boost.勉強会 #11 東京
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
Cve 2013-0422
Cve 2013-0422Cve 2013-0422
Cve 2013-0422
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
JDK 13 New Features [MeetUp with Java Experts! @Gaienmae/Dojima 2019]
 
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
大規模化するピグライフを支えるインフラ ~MongoDBとChefについて~ (前編)
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!Java をクラッシュさせて遊んでみよう!
Java をクラッシュさせて遊んでみよう!
 
Nodejuku01 ohtsu
Nodejuku01 ohtsuNodejuku01 ohtsu
Nodejuku01 ohtsu
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 

Mais de Chihiro Ito

Red Hat Data Grid 8.2 新機能
Red Hat Data Grid 8.2 新機能Red Hat Data Grid 8.2 新機能
Red Hat Data Grid 8.2 新機能Chihiro Ito
 
Red Hat Data Grid 8.1 新機能
Red Hat Data Grid 8.1 新機能Red Hat Data Grid 8.1 新機能
Red Hat Data Grid 8.1 新機能Chihiro Ito
 
Quarkus Technical Deep Dive - Japanese
Quarkus Technical Deep Dive - JapaneseQuarkus Technical Deep Dive - Japanese
Quarkus Technical Deep Dive - JapaneseChihiro Ito
 
Advanced database monitoring in modern java
Advanced database monitoring in modern javaAdvanced database monitoring in modern java
Advanced database monitoring in modern javaChihiro Ito
 
システムのモダナイズ 落ちても良いアプリの作り方
システムのモダナイズ 落ちても良いアプリの作り方システムのモダナイズ 落ちても良いアプリの作り方
システムのモダナイズ 落ちても良いアプリの作り方Chihiro Ito
 
Quarkusのビジネスと技術的な価値
Quarkusのビジネスと技術的な価値Quarkusのビジネスと技術的な価値
Quarkusのビジネスと技術的な価値Chihiro Ito
 
Quarkus による超音速な Spring アプリケーション開発
Quarkus による超音速な Spring アプリケーション開発Quarkus による超音速な Spring アプリケーション開発
Quarkus による超音速な Spring アプリケーション開発Chihiro Ito
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Chihiro Ito
 
Getting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreGetting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreChihiro Ito
 
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうかWebアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうかChihiro Ito
 
Java Flight Recorderの紹介 at Java Day Tokyo 2015
Java Flight Recorderの紹介  at Java Day Tokyo 2015Java Flight Recorderの紹介  at Java Day Tokyo 2015
Java Flight Recorderの紹介 at Java Day Tokyo 2015Chihiro Ito
 
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法Chihiro Ito
 

Mais de Chihiro Ito (13)

Red Hat Data Grid 8.2 新機能
Red Hat Data Grid 8.2 新機能Red Hat Data Grid 8.2 新機能
Red Hat Data Grid 8.2 新機能
 
Red Hat Data Grid 8.1 新機能
Red Hat Data Grid 8.1 新機能Red Hat Data Grid 8.1 新機能
Red Hat Data Grid 8.1 新機能
 
Quarkus Technical Deep Dive - Japanese
Quarkus Technical Deep Dive - JapaneseQuarkus Technical Deep Dive - Japanese
Quarkus Technical Deep Dive - Japanese
 
Advanced database monitoring in modern java
Advanced database monitoring in modern javaAdvanced database monitoring in modern java
Advanced database monitoring in modern java
 
システムのモダナイズ 落ちても良いアプリの作り方
システムのモダナイズ 落ちても良いアプリの作り方システムのモダナイズ 落ちても良いアプリの作り方
システムのモダナイズ 落ちても良いアプリの作り方
 
Quarkusのビジネスと技術的な価値
Quarkusのビジネスと技術的な価値Quarkusのビジネスと技術的な価値
Quarkusのビジネスと技術的な価値
 
Quarkus による超音速な Spring アプリケーション開発
Quarkus による超音速な Spring アプリケーション開発Quarkus による超音速な Spring アプリケーション開発
Quarkus による超音速な Spring アプリケーション開発
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要
 
Getting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreGetting started MySQL as Document Data Store
Getting started MySQL as Document Data Store
 
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうかWebアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
 
Hello Java
Hello JavaHello Java
Hello Java
 
Java Flight Recorderの紹介 at Java Day Tokyo 2015
Java Flight Recorderの紹介  at Java Day Tokyo 2015Java Flight Recorderの紹介  at Java Day Tokyo 2015
Java Flight Recorderの紹介 at Java Day Tokyo 2015
 
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
 

Javaはどのように動くのか~スライドでわかるJVMの仕組み