深刻理解Java虛擬機 讀書筆記 之 Class文件結構

  • Java的平臺無關性

        」一次編寫,到處運行「,這個是Java程序的一大優點,其平臺無關性的理想最終操做系統之上的一個應用層即Java虛擬機來實現的。Java虛擬機能夠載入一種與平臺無關的字節碼文件(ByteCode),即Class文件。這個地方,咱們要注意Java虛擬機不和包括Java在類的任何語言綁定,它只與「Class文件」這種特定的二進制文件格式所關聯,Class文件中,包含了Java虛擬機指令集和符號以及若干其餘輔助信息。現在,除了Java代碼能夠經過Javac編譯器編譯成字節碼文件文件以外,JRuby代碼也能夠經過jrubyc編譯器編譯成字節碼文件,Groovy代碼也能夠經過groovyc編譯器編譯成字節碼文件。所以,Java虛擬機不單單是能夠執行Java語言的。ruby

  • Class文件的構成

    Class文件,是一組以8個字節爲基礎單元的二進制流,各個構成項徹底嚴格按照順序緊湊的排列在Class文件中,中間沒有任何分隔符,沒有空隙,當須要8個字節以上的空間的數據項的時候,則會按照高位在前的方式分割成若干個8位字節進行存儲。this

        Class文件中的包括兩張數據類型,無符號數和表,無符號數,以u1,u2,u4,u8來分別表明1個字節、2個字節、4個字節、8個字節,無符號數能夠用來描述數字、索引引用、數量值、或者按照UTF-8編碼構成的字符串值;表是由多個無符號或者其餘數據項的複合數據類型,整個Class文件採用相似於c語言的結構體的僞結構體來存儲數據。編碼

        Class文件結構以下spa

類型 名稱 數量
u4 magic 1
  minor_version  
  major_version  
  constant_pool_count  
  constant_pool  
  access_flag  
  this_class  
  super_class  
  interfaces_count  
  interfaces  
  fields_count  
  fields  
  methods_count  
  methods  
  attributes_count  
  attributes
相關文章
相關標籤/搜索