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.

Java オブジェクトの内部構造

3,311 views

Published on

Internal structures of Java objects (oops)

Published in: Technology
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/36cXjBY ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ♥♥♥ http://bit.ly/36cXjBY ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Java オブジェクトの内部構造

  1. 1. Java オブジェクトの内部構造 2011-08-20 宮川 拓 (@miyakawa_taku)
  2. 2. 自己紹介 名前 宮川 拓 Twitter @miyakawa_taku 職業 SI屋 仕事 Hadooper Java 歴 4年JVM 上で動くオレオレ言語を作っていますhttp://code.google.com/p/kink-lang/
  3. 3. 問題設定• Java オブジェクトが JVM 上でどの様な実体 として表現されているのかが知りたい 1. Java オブジェクトを表現する構造体 2. Java オブジェクトに対する参照の持ち方 (フィー ルド、一時変数、配列の要素) 3. Java オブジェクトの作成・破棄の動作
  4. 4. 今日読む主なソースコード• interpreter/bytecodeInterpreter.cpp – オブジェクトがどのような構造体として扱われてい るかを見る• oop/oop.hpp• oop/instanceOop.hpp – オブジェクトのメモリイメージを見る• oop/oop.inline.hpp – フィールドへのアクセス方法を見る
  5. 5. oop 実装クラスの階層oop ヒープ上に確保される構造体の総称 instanceOop ふつうのクラスのインスタンス methodOop メソッド constMethodOop ? methodDataOop メソッドのプロファイリングデータ arrayOop 配列のインスタンス objArrayOop 参照型の配列のインスタンス typeArrayOop プリミティブ型の配列のインスタンス constantPoolOop メソッドのコンスタントプール constantPoolCacheOop メソッド実行時情報 (フィールドオフセット等) symbolOop メソッド名、クラス名等の intern 表現 klassOop クラス markOop 他の oop のメタ情報の一部。GC対象外 compiledICHolderOop ?
  6. 6. oop のメモリイメージ oopDesc _mark: markOop /* GCのためのメタ情報 */ _klass: klassOop /* oop の型 */xxxOopDesc oop 実装クラスごとのメンバ変数後続領域 oop 実装クラスごとの追加情報 /* こんなイメージ */ typedef struct { int x; int y; char buf[0]; } bitmap; bitmap *b = malloc(sizeof(bitmap) + x * y); b->x = x; b->y = y; memcpy(b->buf, buf, x * y);
  7. 7. instanceOop のメモリイメージ oopDesc _mark: markOop /* GCのためのメタ情報 */ _klass: klassOop /* oop の型 */instanceOopDesc /* 特有のメンバ変数は無し */後続領域 フィールド群 jint num = 42 oop title ⇒ “VOXXX!”: java.lang.String oop info = null フィールドの種類と数は _klass によって決まる
  8. 8. 触れなかった || 分からなかった所• narrowOop と UseCompressedOops – Compressed oops 機能関連• constMethodOop って何? – これはあまり深くなさそう• compiledICHolderOop って何? – JIT コンパイルに絡んでいそう• JIT コンパイルによるメソッド実体の差し変え はどのクラスの担当?

×