JVMS-classファイルフォーマット-2

3701 ワード

http://www.i170.com/Forum/113657
  10    ,  JVMS- class File Format-     ,          AAA。    ?

1、 class          , CHAPTER 4 The class File Format         ;

2、         ,           。

3、    ,       。

 

CHAPTER 4 The class File Format

pseudostructures: class        ,         。    items,Successive items are stored in the class file sequentially, without padding or alignment.   ,            , constant_pool_count    xxx_count。

Tables varying-sized structures , an array fixed-sized items 。

4.1 The ClassFile Structure

    ClassFile {
     u4 magic;
     u2 minor_version;
     u2 major_version;
     u2 constant_pool_count;
     cp_info constant_pool[constant_pool_count-1];
     u2 access_flags;
     u2 this_class;
     u2 super_class;
     u2 interfaces_count;
     u2 interfaces[interfaces_count];
     u2 fields_count;
     field_info fields[fields_count];
     u2 methods_count;
     method_info methods[methods_count];
     u2 attributes_count;
     attribute_info attributes[attributes_count];
    }
     7 ,   cp_info 、field_info、method_info      attribute_info。

         :

1、 10  :JDK1.0.2    class      3.45,version0.50。

2、u2 constant_pool_count       16(   15 ),   0    。       ,      cp_info     。constant_pool table         。    。

3、    :  access_flags ,       ;this_class、super_class       constant_pool  。

4、field_info、method_info attribute_info,         jclasslib    。

 

4.2 The Internal Form of Fully Qualified Class and Interface Names

class      fully qualified form     ,  import       ;java.lang.Object   /  。

4.3 Descriptors

A descriptor using UTF-8 strings (§4.4.7)  the type of a field or method.

4.4 The Constant Pool

 

   ,class     constant_pool table,               。  JVM       /  /   /         ,      constant_pool table      (symbolic information )。

  constant_pool table  /  (entries)   u1 1-byte tag   ,         。

public class Yqj{
    public static int i = 5;
    private final double doo = 5.2;
    String str = "hello";
    public Object foo(){
        int iiiiii = 100;
        return "hello";
    }
}
     AAA    ,37-1 constant_pool table  。     index-tag-  

1、CONSTANT_Methodref (10)        。 5u

2、CONSTANT_Double (6).     2 #     double  5.2, 9u

4、CONSTANT_Fieldref (9), #8 #31        Yqj,dooD, 5u

5、CONSTANT_String (8). string_index  CONSTANT_Utf8_info   #32,          。3u

6、CONSTANT_Fieldref (9), #8 #33        Yqj,strLjava/lang/String

7、CONSTANT_Fieldref (9), #8 #34        Yqj,iI

8、CONSTANT_Class (7). #35     Yqj。3u

9、CONSTANT_Class (7). #36     java/lang/String。3u

10-29,CONSTANT_Utf8 (1).    Utf8      。   :

#10(i),#11(I),#12(doo),#13(D),#14(ConstantValue),

#15(str),#16(Ljava/lang/String),#17(<init>),#18(()V),#19(Code),

#20(LineNumberTable),#21(LocalVariableTable),#22(this),#23(Lyqj),

#24(foo),#25(()Ljava/lang/Object),#26(iiiiii),#27(<clinit>),

#28(SourceFile),#29(Yqj.java),

30、CONSTANT_NameAndType (12). #17,#18     ,<init> ()V

31、CONSTANT_NameAndType (12). #12,#13     ,<doo> D

32、CONSTANT_Utf8 (1).hello

33、CONSTANT_NameAndType (12). #15,#16     ,str Ljava/lang/String

34、CONSTANT_NameAndType (12). #10,#11     ,i I

35、CONSTANT_Utf8 (1).Yqj

36、CONSTANT_Utf8 (1).java/lang/String

  JVM        (java/lang/String、<init>、()V、I、SourceFile  )、        (LYqj、i、doo、iiiiii、foo),            5.2CONSTANT_Double,     #32 CONSTANT_Utf8    constant_pool table。

 

Note: LocalVariableTable is not a necessary attribute. Some compilers even do not generate a LocalVariableTable in .class files, e.g. the jdk 1.4.2_11.