Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

3.330 Aufrufe

Veröffentlicht am

Internal structures of Java objects (oops)

Veröffentlicht in: Technologie
  • Follow the link, new dating source: ❤❤❤ http://bit.ly/36cXjBY ❤❤❤
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Sex in your area is here: ♥♥♥ http://bit.ly/36cXjBY ♥♥♥
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

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 コンパイルによるメソッド実体の差し変え はどのクラスの担当?

×