程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> JVM之Class文件結構,jvmclass結構

JVM之Class文件結構,jvmclass結構

編輯:JAVA綜合教程

JVM之Class文件結構,jvmclass結構


      每一個class文件對應一個類或者接口,但是一個類或者接口不一定生成class文件,classloader直接生成。

  • 魔數和Class文件版本:
    class文件的頭四個字節成為魔數(oxCAFEBABY),確定是否可以被虛擬機接受,多數文件存儲標准都采用這個形式。緊接著的四個字節為版本號,5和6為此版本號(Minor Version),7和8為主版本號(Major Version),版本號從45開始,JDK1.1之後每個大版本發布,主版本號加1.
  • 常量池(大小不定):class文件的資源倉庫,占用空間比較大,和其它數據項交互多,第一個出現表類型數據的數據項。
    • u2類型容量計數constant_pool_count,1開始,0項常量空出,指代不引用任何一個常量項目;
    • 數據類型:字面量(Literal)---接近常量概念,文本字符,final變量;符號引用(加載class文件是進行動態鏈接)---類和借口的全限定名、字段的名稱和描述符、方法的名稱和描述符。
    • 常量池中每一個常量都是一個表,u1標志位標識屬於哪種數據類型。11 + 3.
  • 訪問標志(2字節):
  • 類索引、父類索引與接口索引集合:

    • 類索引(this_class):u2數據類型,確定類的全限定名,
    • 父類索引(super_class):u2數據類型,確定父類全限定名,只有一個(單繼承),除了Object,其它都有父類,父類索引不為0,
    • 接口索引(interfaces):u2類型數據集合,實現的接口,按照implements後的順序排列在接口索引集合中,第一項u2為接口計數器(interfaces_count)標識索引表容量,沒有則為0
  • 字段表(field_info)集合:類或者接口生命的變量,包括類級及接口級變量,不包含局部變量。
    • name_index(常量池引用):字段簡單名稱(沒有類型和參數修飾符的方法或者字段名稱, 對比權限定名--com/xxx/xxx;)
    • descriptor_index(常量池引用):字段描述符,字段數據類型,方法參數列表(數量、類型、順序)和返回值(保持先後順序)
      字段二維數組描述:String[][]=>[[Ljava/lang/String;方法描述符:int getIndex(String[], String ele)=>([Ljava/lang/StringLjava/lang/String)I
  • 方法表集合:...
  • 屬性表集合:...

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved