Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

5,928 views

Published on

  • Be the first to comment

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

  1. 1. JVMの中身を可視化してみた by @eller86 1
  2. 2. whoami● Java, JavaScriptなどを扱う研究開発者● ウェブアプリケーションを再起動するたびに使える ヒープが減る現象を追ったのがJVMとの出会い ● シングルトンだけど、シングルトンじゃなかった!● 持ちネタ ● jps, jstack, jmap, javap, JProfiler, VisualVM ● ASM, PMD, GAE/J, @twistoire, @partakein ● java.lang.instrumentとMBeanで低速SQL解析 2
  3. 3. 概要JVMってよくわからないから図にしてわかりやすくしよう! 3
  4. 4. Whats JVM? 4
  5. 5. A Java Virtual Machine (JVM) is avirtual machine capable of executing Java bytecode. – Wikipedia 5
  6. 6. JVMがあるからWrite Once, Run Anywhere 6
  7. 7. JVMがあるからJava as a Platform 7
  8. 8. なんか重要そうなことは分かったしJavaプログラムがどうやって動くか 理解するのに重要っぽい 8
  9. 9. 仕様書を読んでみよう!The Java Virtual Machine Specification Second Edition オンライン(HTML、英語) 書籍(日本語) 書籍(英語) 9
  10. 10. とりあえず バイトコードランタイムコンスタントプール オペランドスタック ローカル変数 → #jvmjvm 10
  11. 11. バイトコードpopgetstatic indexbyte1 indexbyte2ldc indexinvokevirtual indexbyte1 indexbyte2 →Javaバイトコード入門 11
  12. 12. ランタイムコンスタントプール 12
  13. 13. ランタイムコンスタントプール$ 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
  14. 14. フレーム● オペランドスタック ● 演算に使用するデータを溜めておくスタック● ローカル変数 ● ローカル変数を記録する配列のようなもの ● thisやメソッド引数もここで扱う● その他 →Stack on JavaVM 14
  15. 15. わかった、ような……● 個々の役割はわかるが、どう協調動作するのかイ メージしにくい ● classファイルに定数とバイトコードが書いてあるらしい ● バイトコードをどうやって実行するのか? ● ローカル変数やオペランドスタックはどう使われるの か?● 実際のコードがどう動くのか試してみたい 15
  16. 16. 作ってみた 16
  17. 17. ご清聴ありがとうございましたforkできます!→ http://jsdo.it/eller86/jvms2Twitter @eller86ブログ http://dev.worksap.co.jp/ 17

×