虛擬機(jī)類(lèi)文件結(jié)構(gòu)和加載機(jī)制

類(lèi)文件結(jié)構(gòu)

虛擬機(jī)在對(duì)編譯代碼的時(shí)候會(huì)產(chǎn)生字節(jié)碼的文件萎胰,也就是class文件,這個(gè)字節(jié)碼文件的產(chǎn)生是java虛擬機(jī)實(shí)戰(zhàn)跨平臺(tái)語(yǔ)言操作的重要原因。

首先扣汪,這個(gè)class文件是一組由8個(gè)字節(jié)為基礎(chǔ)單位的二進(jìn)制流。它里面依次包括魔數(shù)和class文件版本科平、常量池褥紫、訪問(wèn)標(biāo)志、類(lèi)索引瞪慧、父類(lèi)索引與接口索引集合髓考、字段表集合、方法表集合汞贸、屬性表集合

重點(diǎn)理解常量池和字段表

常量池:class文件的資源倉(cāng)庫(kù)绳军,為什么這么說(shuō)呢?因?yàn)樗锩娲娣胖芏喑A渴改澹ㄗ置媪亢头?hào)引用门驾,這些常量主要是:類(lèi)和接口的全限定名、字段的名稱和描述符多柑、方法的名稱和描述符奶是。在之后的方法表和屬性表都會(huì)根據(jù)符號(hào)引用找到對(duì)應(yīng)的字面值

舉個(gè)例子,你在字段表中知道了該字段的作用域竣灌、字段名稱聂沙,它是通過(guò)標(biāo)志位來(lái)描述的,然后你通過(guò)這個(gè)標(biāo)志位去引用常量池中對(duì)應(yīng)的常量

常量池的每一個(gè)常量都是一個(gè)表

字段表與方法表以及索引集合初嘹、屬性表集合都是類(lèi)似的及汉,都是一些固定的指標(biāo)位分別來(lái)描述字段、方法屯烦、索引坷随、屬性,再或者就是各自特定的信息(通過(guò)標(biāo)志位的引用找到常量池方法)



類(lèi)加載機(jī)制

虛擬機(jī)在運(yùn)行程序的時(shí)候驻龟,需要將之前編譯好的class文件加載到內(nèi)存温眉,而這個(gè)class文件包括了描述類(lèi)的所有數(shù)據(jù),所以虛擬機(jī)之后還會(huì)對(duì)這些數(shù)據(jù)進(jìn)行處理

總的來(lái)說(shuō)翁狐,虛擬機(jī)加載機(jī)制為:加載class文件类溢、對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)、轉(zhuǎn)換解析露懒、然后初始化闯冷,最終形成java類(lèi)型

虛擬機(jī)要進(jìn)行加載是需要特定的時(shí)機(jī)的,也就是說(shuō)需要特定的一些指令懈词。比如在遇到new 窃躲、getstatic等指令就會(huì)進(jìn)行加載;當(dāng)對(duì)類(lèi)進(jìn)行反射調(diào)用,若類(lèi)沒(méi)有初始化钦睡,需要進(jìn)行加載使其初始化;初始化子類(lèi)時(shí)蒂窒,父類(lèi)沒(méi)初始化躁倒,會(huì)先初始化父類(lèi);執(zhí)行主類(lèi)(main)時(shí)會(huì)初始化;jdk1.7動(dòng)態(tài)語(yǔ)言,對(duì)方法句柄解析結(jié)果之前要先初始化洒琢。之上的叫做類(lèi)的主動(dòng)引用

類(lèi)加載的過(guò)程

加載:

1秧秉、獲取該類(lèi)二進(jìn)制字節(jié)流(找到該類(lèi)對(duì)應(yīng)的class文件)

2、把字節(jié)流的靜態(tài)存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)運(yùn)行時(shí)的數(shù)據(jù)結(jié)構(gòu)

3衰抑、在內(nèi)存中生成這個(gè)類(lèi)的java.lang.class對(duì)象

驗(yàn)證:

驗(yàn)證該class文件能被虛擬機(jī)識(shí)別讀认笥(我猜想會(huì)跟字節(jié)碼文件中的魔數(shù)有關(guān)),并不會(huì)危害虛擬機(jī)

準(zhǔn)備:

類(lèi)變量(static變量)分配內(nèi)存

解析:

將常量池中的符號(hào)引用變?yōu)橹苯右?/p>

初始化:

執(zhí)行類(lèi)構(gòu)造器方法



雙親委派模型


雙親委派模型示意圖


類(lèi)加載在加載類(lèi)的時(shí)候呛踊,一開(kāi)始并不是自己加載砾淌,而是讓這個(gè)類(lèi)的父類(lèi)加載器去加載,以此類(lèi)推谭网,就能確保每個(gè)層次的類(lèi)加載器都是由頂層啟動(dòng)類(lèi)加載器完成的時(shí)候除非父類(lèi)加載器無(wú)法完成子類(lèi)的加載

雙親委派模型確保了每個(gè)相同的類(lèi)加載出來(lái)的類(lèi)屬于同一個(gè)類(lèi)汪厨,因?yàn)椴煌念?lèi)加載器會(huì)導(dǎo)致多個(gè)object實(shí)例對(duì)象為不同的Object對(duì)象,無(wú)法保證java體系最基礎(chǔ)的繼承等行為愉择。所以雙親委派模型保證了java程序運(yùn)作的穩(wěn)定性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末劫乱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锥涕,更是在濱河造成了極大的恐慌衷戈,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件层坠,死亡現(xiàn)場(chǎng)離奇詭異殖妇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)破花,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)拉一,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人旧乞,你說(shuō)我怎么就攤上這事“醢保” “怎么了尺栖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)烦租。 經(jīng)常有香客問(wèn)我延赌,道長(zhǎng),這世上最難降的妖魔是什么叉橱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任挫以,我火速辦了婚禮,結(jié)果婚禮上窃祝,老公的妹妹穿的比我還像新娘掐松。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布大磺。 她就那樣靜靜地躺著抡句,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杠愧。 梳的紋絲不亂的頭發(fā)上待榔,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音流济,去河邊找鬼锐锣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绳瘟,可吹牛的內(nèi)容都是我干的雕憔。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼稽荧,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼橘茉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起姨丈,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤畅卓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蟋恬,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體翁潘,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年歼争,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拜马。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沐绒,死狀恐怖俩莽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乔遮,我是刑警寧澤扮超,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站蹋肮,受9級(jí)特大地震影響出刷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坯辩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一馁龟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漆魔,春花似錦坷檩、人聲如沸却音。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)僧家。三九已至,卻和暖如春裸删,著一層夾襖步出監(jiān)牢的瞬間八拱,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工涯塔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肌稻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓匕荸,卻偏偏與公主長(zhǎng)得像爹谭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子榛搔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容