1. 程式人生 > 實用技巧 >JVM系列【2】Class檔案結構

JVM系列【2】Class檔案結構

JVM系列筆記目錄

  • 虛擬機器的基礎概念
  • class檔案結構
  • class檔案載入過程
  • jvm記憶體模型
  • JVM常用指令
  • GC與調優

如何檢視class位元組碼檔案

在idea中可以通過外掛BinEd來檢視二進位制或十六進位制檔案。展示一個簡單類的class檔案源位元組碼,看不懂?請往下看。

file

更直觀一點的可以在idea中安裝外掛jclasslib,選中類檔案->View-> Show Bytecode With jclasslib。該外掛清楚地看到.class檔案的各個組成部分。

file

另外一種方式,通過javap檢視。

file

Class檔案結構

檔案結構由16個部分組成,約定下u4指佔用的位元組數為4,u2同理。這裡指簡單說明各個部分的含義,不做詳細展開,如想深入瞭解,參考

JVM規範第4章節The class File Format

  • Magic Number class檔案標誌符 u4,ca fe ba be
  • Minor Version class檔案小版本號 u2
  • Major Version 主版本號 u2,主版本+小版本號構成jdk版本,jdk8 預設 52.0,jdk7預設為51.0
  • constant_pool_count 常量池的大小u2
  • constant_pool 長度為constant_pool_count-1的陣列,class檔案中最複雜的部分
  • access_flag 類修飾符
  • this_class 類全名,指向常量池某個元素
  • super_class 父類名 指向常量池的某個元素
  • interface_count 實現的介面數量
  • interfaces 介面
  • fields_count 欄位數量
  • fields 欄位
  • method_count 方法數量
  • methods 方法
  • attribute_count 附加屬性數量
  • attributes 附加屬性

總結

class 檔案結構很複雜,本為只是作簡單介紹,為 JVM系列【3】Class檔案載入過程JVM系列【4】記憶體模型作為基礎知識點的鋪墊。真正想深入理解class檔案結構的,請閱讀官方JVM規範。

知識分享,轉載請註明出處。學無先後,達者為先!