class文件的大致結構從前到后
名稱 | 用途 | 大小 | 補充說明 |
---|---|---|---|
魔數 | (用來驗證是不是虛擬機合適的class文件 | 4字節 | 因為后綴名可以隨意改動,所以使用魔數也是出于安全的考慮 |
版本號 | (用來標識該class文件能夠在哪個版本jdk運行) | 4字節 | 前2字節是次版本號,后2字節是主版本號 版本高的jdk可以加載版本低的class文件 |
常量池 | (class文件的資源倉庫) | 不定 | 主要存放字面量和符號引用,字面量就是文本字符串和申明為final的常量,符號引用包括了類和接口的全限定名,字段名稱和描述符。方法名稱和描述符,常量池的容量計數從1開始。因為常量池0的位置用來存儲常量池的容量 |
訪問標志 | (定義是不是類,是不是public | 2字節 | 就是判斷一個class的訪問標志,是否final,是否public |
類索引 | 確定本類的全限定名 | 2字節 | 無 |
父類索引 | 確定父類的全限定名 | 2字節 | 無 |
接口索引計數器 | 統計接口的數量 | 2字節 | 無 |
接口索引集合 | 接口們的全限定名 | 接口計數器*2 | 無 |
字段表集合 | 描述申明的變量包括類級變量實例變量不包括局部變量 | 不定 | 不會列出超類或父接口的繼承的字段 |
方法表集合 | 描述申明的方法包括訪問標志,名稱索引,描述符索引,屬性表索引,屬性表集合 |
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69625.html
摘要:對象創建與訪問指令雖然類實例和數組都是對象,但虛擬機對類實例和數組的創建和操作使用了不同的字節碼指令。異常處理指令在虛擬機中,處理異常語句不是由字節碼指令來實現的,而是采用異常表的方式。 《深入理解Java虛擬機:JVM高級特性與最佳實踐(第二版》讀書筆記與常見面試題總結 本節常見面試題(推薦帶著問題閱讀,問題答案在文中都有提到): 簡單介紹一下Class類文件結構(常量池主要存放的是...
摘要:對一個文件的字節碼進行逐行的分析是理解文件結構的最佳方式。本文的目的在于盡可能完整地拆解的字節碼并將其分塊分析,最終得到的圖解結構希望可以幫助到你。字節碼指令的具體含義鑒于與結構是相對獨立的主題不再詳述,后續會再單獨深入介紹。 對一個class文件的字節碼進行逐行的分析是理解class文件結構的最佳方式。但是往往復雜的二進制字節碼會讓人望而卻步,或者只有仔細一點點盯著才能保證不花眼。本...
摘要:在屬性中,和分別用于存儲字節碼長度和字節碼指令,每條指令即一個字節類型。在虛擬機執行時,通過讀取中的一個個字節碼,并將字節碼翻譯成相應的指令。另外,雖然是一個類型的值,但是實際上一個方法不允許超過條字節碼指令。 最近在寫一個私人項目,名字叫做SmallVM,SmallVM的目的在于通過實現一個輕量級的Java虛擬機,加深對Java虛擬機的認知和理解。在Java虛擬機加載類的過程中,需要...
摘要:在屬性中,和分別用于存儲字節碼長度和字節碼指令,每條指令即一個字節類型。在虛擬機執行時,通過讀取中的一個個字節碼,并將字節碼翻譯成相應的指令。另外,雖然是一個類型的值,但是實際上一個方法不允許超過條字節碼指令。 最近在寫一個私人項目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能讓我們對Java Class文件的設計與結構能夠有一個深入的理解。主體框架與基本功...
摘要:類文件的結構文件是一組以位字節為基礎單位的二進制流,各個數據項目嚴格按照順序緊湊地排列在文件之中,中間沒有添加任何分隔符,這使得整個文件中存儲的內容幾乎全部是程序運行的必要數據,沒有空隙存在。 點擊進入我的博客 4.1 字節碼 平臺無關:Sun公司以及其他的虛擬機提供商發布了許多可以運行在各種不同平臺上的虛擬機,這些虛擬機都可以載入和執行同一種平臺無關的字節碼,從而實現了程序的一次編...
閱讀 1882·2021-11-11 16:55
閱讀 2064·2021-10-08 10:13
閱讀 739·2019-08-30 11:01
閱讀 2155·2019-08-29 13:19
閱讀 3277·2019-08-28 18:18
閱讀 2620·2019-08-26 13:26
閱讀 579·2019-08-26 11:40
閱讀 1864·2019-08-23 17:17