一般的レイアウト
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/23 05:01 UTC 版)
「Javaクラスファイル」の記事における「一般的レイアウト」の解説
クラスファイルは可変長の項目を含み、組み込まれたファイルのオフセット(またはポインタ)すら含まないため、通常は最初のバイトから最後まで順番に解析される。最も低レベルな点から、ファイルフォーマットはいくつかの基本的なデータ型の点から記述される: u1: 符号なし8ビット整数 u2: ビッグエンディアンバイト順の符号なし16ビット整数 u4: ビッグエンディアンバイト順の符号なし32ビット整数 テーブル: いくつかの型の可変長の配列。テーブルのテーブル内の項目数はカウント数により識別されるが、テーブルのバイト内のサイズは項目それぞれを調査することのみで決定される。 これらの基礎的な型の一部は、前後関係に依存することで次に(文字列や浮動小数点数といった)上位レベルの値として再解釈される。ワードが一直線に並ぶことは強制されないので、パディングバイトは常に利用されない。クラスファイルの全てのレイアウトは以下のテーブル内のように見られる。 バイトオフセットサイズ型あるいは値記述0 4バイト u1 =0xCA 十六進 クラスファイルフォーマットに適合するファイルを識別するために使用されるマジックナンバー (CAFEBABE) 1 u1 =0xFE 十六進 2 u1 =0xBA 十六進 3 u1 =0xBE 十六進 4 2バイト u2 使用されるクラスファイルフォーマットのマイナーバージョン数 5 6 2バイト u2 使用されるクラスファイルフォーマットのメジャーバージョン数。JDK 1.1 = 45(0x2D 十六進)、JDK 1.2 = 46(0x2E 十六進)、JDK 1.3 = 47(0x2F 十六進)、JDK 1.4 = 48(0x30 十六進)、J2SE 5.0 = 49(0x31 十六進)、JavaSE 6.0 = 50(0x32 十六進)、JavaSE 7 = 51(0x33 十六進)、以降メジャーバージョン毎に1ずつ加算。初期バージョン数の詳細についてはThe JavaTM Virtual Machine Specification 2nd editionの脚注を参照すること。 7 8 2バイト u2 定数プールカウント、以下の定数プールテーブル内のエントリ数。このカウントは少なくとも1つは実在のエントリ数よりも大きい。以下の議論を参照すること。 9 10 cpsize(変数) テーブル 定数プールテーブル、リテラル数、文字列、そしてクラスやメソッドへの参照といった項目を含む、可変長の定数プールエントリ。合計エントリ(定数テーブルカウント - 1)数を含む、1から始まり索引付けされる(脚注を参照すること)。 ... ... ... 10+cpsize 2バイト u2 ビットマスクによるアクセスフラグ 11+cpsize 12+cpsize 2バイト u2 「クラス」型エントリの定数プールへのインデックスである、thisクラスを識別する 13+cpsize 14+cpsize 2バイト u2 「クラス」型エントリの定数プールへのインデックスである、スーパークラスを識別する 15+cpsize 16+cpsize 2バイト u2 インタフェースカウント、以下のインタフェーステーブル内のエントリの数 17+cpsize 18+cpsize isize(変数) テーブル インタフェーステーブル、可変長インタフェースの配列 ... ... ... 18+cpsize+isize 2バイト u2 変数カウント、以下のフィールド内のエントリの数 19+cpsize+isize 20+cpsize+isize fsize(変数) テーブル フィールドテーブル、フィールドの可変長配列 ... ... ... 20+cpsize+isize+fsize 2バイト u2 メソッドカウント、以下のメソッドテーブル内のエントリ数 21+cpsize+isize+fsize 22+cpsize+isize+fsize msize(変数) テーブル メソッドテーブル、メソッドの可変長配列 ... ... ... 22+cpsize+isize+fsize+msize 2バイト u2 属性カウント、以下の属性テーブル内のエントリ数 23+cpsize+isize+fsize+msize 24+cpsize+isize+fsize+msize asize(変数) テーブル 属性テーブル、属性の可変長配列 ... ... ...
※この「一般的レイアウト」の解説は、「Javaクラスファイル」の解説の一部です。
「一般的レイアウト」を含む「Javaクラスファイル」の記事については、「Javaクラスファイル」の概要を参照ください。
- 一般的レイアウトのページへのリンク