読書会(Java仮想マシン仕様)第3回議事録
[ 戻る ]
         「Java仮想マシン仕様」を読み会 第3回
日時:1999年12月18日(土) 10:00−16:15
場所:Javaカンファレンス会議室(曙橋ビル8階)
出席者:遠藤、高橋、酒井、山下、小川、古橋、
    布留川、石黒、宮崎、前橋、斎藤(記)(敬称略、順不同)
・書記選出:斎藤
・自己紹介:省略
・読み手選出:高橋さん
概要:第4章 classファイル・フォーマットについての詳細で、
   「4.9のclassファイルの検証」前まで読みました。
項目:
第4章 classファイル・フォーマットについて
  Q.可変長テーブルとは?
  A.項目が可変長であり、テーブルは違う。
   テーブルの表現では可変長で、配列では固定長アイテム。
4.1 classfile
   Q.クラスファイルのメジャー番号について
   A.UNIX etc/.magicファイルに記載されておりclassファイルを識別する。
   % file Test.class
     →クラスファイルの先頭:CAFEBABE(0xCA, 0xFE, 0xBA, 0xBE)
                   メジャーバージョン.マイナーバージョン
     JDK1.02        45.0  <= version <= 45.3
     JDK1.1.x       45.0  <= version <=  45.65535
     JDK1.2         45.0  <= version <=  46.0
    *JDK1.2では、javacオプション(-target 1.2)により1.2専用コードを出力。
    通常(オプション無し):45.3  専用(オプション付き):46.0 を出力確認。
 Q.CONSTNT_POOL領域のlong, doubleは例外的な取り扱い。
 A.たぶん、64Bitのため。
 Q.表4.1:ACC_ABSTEACTの意味「abstractであり、具体的に示すことはできない」
 A.訳が悪い「abstractであり、インスタンス化する事ができない」の意味である。
  Q.セマンティクスとは?
 A.意味合いの違いを表す。
  文法での例) if(a == b) , if(a = b)  '='数により意味が変わってしまう。
  Q.invokespecial命令とは?
 A.あとの章で。
  Q.p66「ソース中の左から右に記述した順番」?
  A.格納した順番で実行?
  p67:Secound Edition にて追加
  SourceFile属性以外に、Deprecated属性が追加されている。
4.2 完全限定クラス名
4.3 ディスクリプタ
  p68:英訳抜け
  クラスファイルでは、UTF_8の表現を利用するUNICODE文字コード全体から構成される。
  Q.p70:メソッド・ディスクリプタは255ワード以下?
  A.文字数でなく大きさである。クラスは1ワード。
    public, privateなどの属性は、ディスクリプタに記入しない。
  Q.エンディアンとは?(ビックエンディアン)
  A.バイト単位で読み込んだ数値をshort, longに変換する場合の格納位置を示す。
    例) 0x12, 0x34, 0x56, 0x78 と読み込んだ数値をlong変換する場合。
        ビックエンディアン:0x12345678
        リトルエンディアン:0x78563412
        また、ビットエンディアン(MSB, LSB)というのもある。
4.4 コンスタント・プール
  Q.CONSTANT_NameAndTypeとは?
  A.どのクラス型インターフェイス型であるか明示せずに表現するため?
  Q.*1)8バイトの定数に2つのコンスタント・プール・エントリを占有させるといった
    仕様は現時点では問題であると考えられている。
  A.Secound Edition 英語版では。
    今考えるとプアーな実装であった。
  Q.CONSTANT-Utf8 図の見方
  A.ビット0 - 6は、ビット位置を示す。
        7 6 5 4 3 2 1 0
       +-+-+-+-+-+-+-+-+
       |0| ビット0 - 6 |
       +-+-------------+
4.5 フィールド
  p78:表4.3 Secound Editionでは、「何が使用するか」項目なし
  p79:「定義している唯一の属性は、」
  A. Secound Editionでは、3つあり、+Synthetic, Deprecated属性
4.6 メソッド
  p79:Secound Editionにて追加。
  A.一つのクラス中に同じメソッドディスクリプタの名前があってはダメ。
 (*)クラスファイルを編集して、戻り値を変えたもので複数メソッドが作成できる?
  p80:表4.4 Secound Editionにて追加。
  A.ACC_STRICT 0x0080 こんなのが増えている。(詳細省略?)
4.7 属性
  p81:Secound Editionにて追加。
  A.Synthmetic, Deprecated属性追加。
  p81:翻訳の誤記「属性の名前を表現したCONSTANT_Utf8文字列でなければならない」
  A.「属性の名前を表現したCONSTANT_Utf8_Info構造体でなければならない」
  ・Secoundでは、属性の説明項目が3つ追加。
  A.InnerClasses, Synthetic, Deprecated属性。
    Synthetic, Deprecate属性のJava2クラスライブラリは、クラスファイルリーダ
    によって正しく認識されなければならない。
  p82:Secound Editionにて小文字に変更「"COM.Netscape.new-attribute"」
  A.「"com.Netscape.new-attribute"」
  p85:翻訳の誤記:「文字列"Code"を表現したCONSTANT_Utf8($4.4.7)構造体」
  A.「文字列"Code"を表現したCONSTANT_Utf8_Info($4.4.7)構造体」
  p85:Secound Editionにて追加。
  A.native, abstractは、Code属性を持ってはいけない。
    さもなければ一つだけ持つ。
  p87:Secound Editionにて削除。「上記の要件は現時点のJava仮想マシンには必要ではな
    く 、コンパイル時のみ必須である。Java言語の今後のバージョンでは、クラスを検証
    するさいにより厳しいthrows節の検証を必要とするよう変更を行う可能性がある。」
4.8 Java仮想マシン・コードにおける制約
  Q.anewarray命令は、255を超える配列生成できない理由は?
  A.255のディスクリプタ制限から受ける制約?
                     ----- 「4.8.2構造体制約」まで ------
次回:第5章から
(注意)英語版と章立てが違いすぎるためコピーが必要である。
次回日程:1/15(土)の予定。
以上。
#最後の方で、意識が飛んでしまった読み手の高橋さんご苦労さまでした。
#終了後にServret BOF御用達の飲み屋:牛タンや?にて乾杯した。
---
esaito@fdi.fujitsu.co.jp
[ 戻る ]