SlideShare a Scribd company logo
JVMの中身を可視化してみた
    by @eller86




                  1
whoami
●   Java, JavaScriptなどを扱う研究開発者
●   ウェブアプリケーションを再起動するたびに使える
    ヒープが減る現象を追ったのがJVMとの出会い
    ●
        シングルトンだけど、シングルトンじゃなかった!

●   持ちネタ
    ●   jps, jstack, jmap, javap, JProfiler, VisualVM
    ●   ASM, PMD, GAE/J, @twistoire, @partakein
    ●   java.lang.instrumentとMBeanで低速SQL解析

                                                        2
概要

JVMってよくわからないから
図にしてわかりやすくしよう!



                 3
What's JVM?




              4
A Java Virtual Machine (JVM) is a
virtual machine capable of executing
           Java bytecode.
             – Wikipedia




                                       5
JVMがあるから

Write Once, Run Anywhere




                           6
JVMがあるから

Java as a Platform




                     7
なんか重要そうなことは分かったし
Javaプログラムがどうやって動くか
    理解するのに重要っぽい




                     8
仕様書を読んでみよう!

The Java Virtual Machine Specification
           Second Edition

       オンライン(HTML、英語)
          書籍(日本語)
           書籍(英語)


                                         9
とりあえず

    バイトコード
ランタイムコンスタントプール
   オペランドスタック
    ローカル変数
    → #jvmjvm



                 10
バイトコード

pop


getstatic indexbyte1 indexbyte2


ldc index


invokevirtual indexbyte1 indexbyte2


                          →Javaバイトコード入門 11
ランタイムコンスタントプール




                 12
ランタイムコンスタントプール
$ javap -verbose Integer
  Compiled from "Integer.java"
  // 中略
    Constant pool:
  const #1 = int -2147483648;
  const #2 = int -2147483647;
  const #3 = int 52429;
  const #4 = int 65536;
  const #5 = String    #30;
    //   greater than Character.MAX_RADIX   13
フレーム
●   オペランドスタック
    ●
        演算に使用するデータを溜めておくスタック
●   ローカル変数
    ●   ローカル変数を記録する配列のようなもの
    ●   thisやメソッド引数もここで扱う
●   その他




                     →Stack on JavaVM   14
わかった、ような……
●   個々の役割はわかるが、どう協調動作するのかイ
    メージしにくい
    ●   classファイルに定数とバイトコードが書いてあるらしい
    ●
        バイトコードをどうやって実行するのか?
    ●
        ローカル変数やオペランドスタックはどう使われるの
        か?

●   実際のコードがどう動くのか試してみたい



                                       15
作ってみた




        16
ご清聴ありがとうございました



forkできます!→   http://jsdo.it/eller86/jvms2

Twitter      @eller86
ブログ          http://dev.worksap.co.jp/



                                            17

More Related Content

PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
PDF
Javaクラスファイルの読み方
PDF
OpenJDK トラブルシューティング #javacasual
PDF
Javaはどのように動くのか~スライドでわかるJVMの仕組み
ODP
スレッドダンプの読み方
PDF
Jvm言語とJava、切っても切れないその関係
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
PDF
楽して JVM を学びたい #jjug
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
Javaクラスファイルの読み方
OpenJDK トラブルシューティング #javacasual
Javaはどのように動くのか~スライドでわかるJVMの仕組み
スレッドダンプの読み方
Jvm言語とJava、切っても切れないその関係
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
楽して JVM を学びたい #jjug

What's hot (20)

PPTX
java.lang.OutOfMemoryError #渋谷java
PDF
JavaScript基礎勉強会
PDF
Javascriptのあれやこれやをまとめて説明してみる
PDF
Javaのログ出力: 道具と考え方
PPTX
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
PDF
モダンJavaScript環境構築一歩目
PDF
Groovyで楽にSQLを実行してみよう
PDF
できる!並列・並行プログラミング
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
PDF
Jbatch実践入門 #jdt2015
PDF
JavaScriptユーティリティライブラリの紹介
PDF
Java EEを補完する仕様 MicroProfile
PDF
10のJava9で変わるJava8の嫌なとこ!
PDF
JVM のいろはにほ #javajo
PDF
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
PDF
覚醒!JavaScript
PDF
Kink: プロトタイプベースの俺々 JVM 言語
PDF
第三回ありえる社内勉強会 「いわががのLombok」
PDF
ClassLoader Leak Patterns
PDF
いまさら恥ずかしくてAsyncをawaitした
java.lang.OutOfMemoryError #渋谷java
JavaScript基礎勉強会
Javascriptのあれやこれやをまとめて説明してみる
Javaのログ出力: 道具と考え方
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
モダンJavaScript環境構築一歩目
Groovyで楽にSQLを実行してみよう
できる!並列・並行プログラミング
Java開発の強力な相棒として今すぐ使えるGroovy
Jbatch実践入門 #jdt2015
JavaScriptユーティリティライブラリの紹介
Java EEを補完する仕様 MicroProfile
10のJava9で変わるJava8の嫌なとこ!
JVM のいろはにほ #javajo
Introduction to JShell: the Java REPL Tool #jjug_ccc #ccc_ab4
覚醒!JavaScript
Kink: プロトタイプベースの俺々 JVM 言語
第三回ありえる社内勉強会 「いわががのLombok」
ClassLoader Leak Patterns
いまさら恥ずかしくてAsyncをawaitした
Ad

Viewers also liked (15)

PPT
Javaバイトコード入門
PPTX
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
PDF
Java素人がeclipseプラグインを作るためにやったこと
PDF
Stack on JavaVM
PDF
Docker and jvm. A good idea?
PDF
脱Java初心者を目指すときに読むといいと思う本を考える会
PPT
Java9新機能概要
PDF
ふりかえり
PDF
明日に繋がるふり返りのプラクティス
PPTX
Spring bootで学ぶ初めてのwebアプリ開発
PPTX
要求開発を補完する現状分析
PPTX
アジャイル勉強会 公開資料
PPTX
進化するArt
PDF
データモデルは時空を越える
PDF
データベース設計徹底指南
Javaバイトコード入門
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
Java素人がeclipseプラグインを作るためにやったこと
Stack on JavaVM
Docker and jvm. A good idea?
脱Java初心者を目指すときに読むといいと思う本を考える会
Java9新機能概要
ふりかえり
明日に繋がるふり返りのプラクティス
Spring bootで学ぶ初めてのwebアプリ開発
要求開発を補完する現状分析
アジャイル勉強会 公開資料
進化するArt
データモデルは時空を越える
データベース設計徹底指南
Ad

Similar to JVMの中身を可視化してみた (20)

PDF
InvokeDynamic at #shikadriven 2012
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
PDF
VMを改めて学んで見る
PDF
Mbed2013
PDF
DoActionからJava VMバイトコードに変換する話
PDF
Hello Java
PPTX
Jjug night seminar201208_lt_cxxからjvm起動
PDF
夏だからJava再入門
PDF
Dalvik仮想マシンのアーキテクチャ 改訂版
PDF
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
PPTX
ななめ45°から見たJavaOne
PDF
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
KEY
関ジャバ JavaOne Tokyo 2012報告会
PDF
Var handles jjug_ccc_spring_2018
PDF
Javaセキュアコーディングセミナー東京第3回講義
PPTX
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
PDF
Dalvikバイトコードリファレンスの読み方 改訂版
PPTX
Javaで簡単にgpgpu aparapi
PDF
VisualVMの紹介
PDF
JDK 10 へようこそ
InvokeDynamic at #shikadriven 2012
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
VMを改めて学んで見る
Mbed2013
DoActionからJava VMバイトコードに変換する話
Hello Java
Jjug night seminar201208_lt_cxxからjvm起動
夏だからJava再入門
Dalvik仮想マシンのアーキテクチャ 改訂版
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
ななめ45°から見たJavaOne
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
関ジャバ JavaOne Tokyo 2012報告会
Var handles jjug_ccc_spring_2018
Javaセキュアコーディングセミナー東京第3回講義
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Dalvikバイトコードリファレンスの読み方 改訂版
Javaで簡単にgpgpu aparapi
VisualVMの紹介
JDK 10 へようこそ

JVMの中身を可視化してみた