SlideShare a Scribd company logo
1 of 36
Download to read 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

More Related Content

What's hot

Jvm internal
Jvm internalJvm internal
Jvm internalGo Tanaka
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Norito Agetsuma
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢apkiban
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javaYuji Kubota
 
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6Yuji Kubota
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてShigeru Tatsuta
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?takezoe
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能Kohei Tokunaga
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)Yoshiro Tokumasu
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...Google Cloud Platform - Japan
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 

What's hot (20)

Jvm internal
Jvm internalJvm internal
Jvm internal
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
 
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷java
 
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
Garbage First Garbage Collection (G1 GC) #jjug_ccc #ccc_cd6
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
 
そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?そんなトランザクションマネージャで大丈夫か?
そんなトランザクションマネージャで大丈夫か?
 
BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
 
Quarkus入門
Quarkus入門Quarkus入門
Quarkus入門
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
株式会社コロプラ『GKE と Cloud Spanner が躍動するドラゴンクエストウォーク』第 9 回 Google Cloud INSIDE Game...
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 

Similar to 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
 

Similar to 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でブラウザメッセンジャー
 

More from 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
 

More from 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のキャッシュを使ったアプリケーション高速化手法
 

Recently uploaded

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 

Recently uploaded (9)

20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 

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