JVM系列【2】Class檔案結構
阿新 • • 發佈:2020-10-18
JVM系列筆記目錄
- 虛擬機器的基礎概念
- class檔案結構
- class檔案載入過程
- jvm記憶體模型
- JVM常用指令
- GC與調優
如何檢視class位元組碼檔案
在idea中可以通過外掛BinEd
來檢視二進位制或十六進位制檔案。展示一個簡單類的class檔案源位元組碼,看不懂?請往下看。
更直觀一點的可以在idea中安裝外掛jclasslib
,選中類檔案->View-> Show Bytecode With jclasslib。該外掛清楚地看到.class
檔案的各個組成部分。
另外一種方式,通過javap
檢視。
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規範。
知識分享,轉載請註明出處。學無先後,達者為先!