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