類加載過程

類加載過程

  • 加載
  • 驗(yàn)證
  • 準(zhǔn)備
  • 解析
  • 初始化

加載

在加載階段屋彪,虛擬機(jī)需要完成3件事情:
1所宰、獲取類的二進(jìn)制字節(jié)流
2、將這個(gè)字節(jié)流所代表的靜態(tài)存儲(chǔ)結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)
3畜挥、在內(nèi)存中生成一個(gè)代表這個(gè)類的java.lang.Class對(duì)象仔粥,作為方法區(qū)這個(gè)類的各種數(shù)據(jù)的訪問入口

數(shù)組的加載有所不同,數(shù)組類本身不通過類加載器創(chuàng)建蟹但,它是由Java虛擬機(jī)直接創(chuàng)建的

驗(yàn)證

這一階段的目的是為了確保Class文件的字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求躯泰,并且不會(huì)危害虛擬機(jī)自身的安全,大致上會(huì)完成4個(gè)階段:文件格式驗(yàn)證华糖、元數(shù)據(jù)驗(yàn)證麦向、字節(jié)碼驗(yàn)證符號(hào)引用驗(yàn)證客叉。

文件格式驗(yàn)證

驗(yàn)證字節(jié)流是否符合Class文件格式的規(guī)范诵竭,并且能被當(dāng)前版本的虛擬機(jī)處理。該階段的驗(yàn)證的目的主要是保證輸入的字節(jié)流能正確地解析并存儲(chǔ)于方法區(qū)之內(nèi)兼搏,只有通過了這個(gè)階段的驗(yàn)證后卵慰,字節(jié)流才會(huì)進(jìn)入內(nèi)存的方法區(qū)進(jìn)行存儲(chǔ),所以后面3個(gè)階段的驗(yàn)證都是基于方法區(qū)的存儲(chǔ)結(jié)構(gòu)進(jìn)行的佛呻。

元數(shù)據(jù)驗(yàn)證

對(duì)字節(jié)碼描述的信息進(jìn)行語義分析裳朋,以確保其描述符合Java語言規(guī)范的要求。

字節(jié)碼驗(yàn)證

整個(gè)驗(yàn)證過程中最復(fù)雜的一個(gè)階段件相,主要目的是通過數(shù)據(jù)流和控制流分析再扭,確保程序語義是合法的、符合邏輯的夜矗。對(duì)類的方法體進(jìn)行校驗(yàn)分析泛范,保證被校驗(yàn)類的方法在運(yùn)行時(shí)不會(huì)做出危害虛擬機(jī)安全的事件。

符號(hào)引用驗(yàn)證

符號(hào)引用驗(yàn)證可以看作是對(duì)類自身以外(常量池的各種符號(hào)引用)的信息進(jìn)行匹配性校驗(yàn)紊撕。

準(zhǔn)備

準(zhǔn)備階段是正式為類變量(static修飾)分配內(nèi)存并設(shè)置類變量初始值(一般是零值)的階段罢荡,這些變量所使用的內(nèi)存都將在方法區(qū)中進(jìn)行分配。

解析

解析階段是虛擬機(jī)將常量池內(nèi)的符號(hào)引用替換為直接引用的過程。

  • 符號(hào)引用:與虛擬機(jī)實(shí)現(xiàn)的內(nèi)存布局無關(guān)区赵,引用的目標(biāo)也不一定已經(jīng)加載到內(nèi)存中惭缰。
  • 直接引用:可以是直接指向目標(biāo)的指針、相對(duì)偏移量或一個(gè)能間接定位到目標(biāo)的句柄笼才。直接引用的目標(biāo)必定已經(jīng)加載在內(nèi)存中漱受。

初始化

類加載的最后一步,真正執(zhí)行類中定義的Java程序代碼骡送。初始化過程就是執(zhí)行類構(gòu)造器<clinit>()方法的過程昂羡。
<clinit>()方法是有編譯器自動(dòng)手機(jī)類中所有類變量賦值動(dòng)作和靜態(tài)代碼塊(static{}塊)中的語句合并產(chǎn)生的,收集順序由語句在源文件出現(xiàn)的順序所決定摔踱,它與類的構(gòu)造函數(shù)(<init>())不同虐先,它不需要顯示調(diào)用父類構(gòu)造器,虛擬機(jī)會(huì)保證子類的<clinit>()方法執(zhí)行之前派敷,父類的<clinit>()方法已經(jīng)執(zhí)行完畢蛹批。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市篮愉,隨后出現(xiàn)的幾起案子腐芍,更是在濱河造成了極大的恐慌,老刑警劉巖试躏,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件甸赃,死亡現(xiàn)場離奇詭異,居然都是意外死亡冗酿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門络断,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裁替,“玉大人,你說我怎么就攤上這事貌笨∪跖校” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵锥惋,是天一觀的道長昌腰。 經(jīng)常有香客問我,道長膀跌,這世上最難降的妖魔是什么遭商? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮捅伤,結(jié)果婚禮上劫流,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好祠汇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布仍秤。 她就那樣靜靜地躺著,像睡著了一般可很。 火紅的嫁衣襯著肌膚如雪诗力。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天我抠,我揣著相機(jī)與錄音苇本,去河邊找鬼。 笑死屿良,一個(gè)胖子當(dāng)著我的面吹牛圈澈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播尘惧,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼康栈,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了喷橙?” 一聲冷哼從身側(cè)響起啥么,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贰逾,沒想到半個(gè)月后悬荣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疙剑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了言缤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嚼蚀。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖管挟,靈堂內(nèi)的尸體忽然破棺而出轿曙,到底是詐尸還是另有隱情,我是刑警寧澤僻孝,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布导帝,位于F島的核電站,受9級(jí)特大地震影響穿铆,放射性物質(zhì)發(fā)生泄漏您单。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一悴务、第九天 我趴在偏房一處隱蔽的房頂上張望睹限。 院中可真熱鬧譬猫,春花似錦、人聲如沸羡疗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叨恨。三九已至柳刮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痒钝,已是汗流浹背秉颗。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留送矩,地道東北人蚕甥。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像栋荸,于是被迫代替她去往敵國和親菇怀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 接下來我們?cè)敿?xì)講解一下Java虛擬機(jī)中類加載的全過程晌块,也就是加載爱沟、驗(yàn)證、準(zhǔn)備匆背、解析和初始化這5個(gè)階段所執(zhí)行的具體動(dòng)...
    史小猿閱讀 1,028評(píng)論 2 0
  • 1.概述 虛擬機(jī)把描述類的數(shù)據(jù)從Class文件加載到內(nèi)存中呼伸,并對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)、轉(zhuǎn)換解析和初始化钝尸,最終形成可以被虛擬...
    JESiller閱讀 448評(píng)論 2 2
  • (一)概要: 1括享、虛擬機(jī)如何加載Class文件 2、Class文件加載到虛擬機(jī)以后都會(huì)發(fā)生什么變化 (二)類加載機(jī)...
    luohuan519閱讀 1,146評(píng)論 0 0
  • 類從 被加載到虛擬機(jī)內(nèi)存中 開始珍促,到 卸載出內(nèi)存 為止奶浦,它的生命周期包括:加載(Loading)、驗(yàn)證(Verif...
    未名爪哇閱讀 363評(píng)論 0 0
  • (一)加載 加載階段踢星,虛擬機(jī)完成三件事:- 通過一個(gè)類的全限定名來獲取定義此類的二進(jìn)制字節(jié)流;- 將這個(gè)字節(jié)流所...
    Hughman閱讀 1,086評(píng)論 0 5