java-類加載機制

類的加載機制

主要關(guān)注點:

什么是類的加載

類的生命周期

類加載器

雙親委派模型

什么是類的加載

類的加載指的是將類的.class文件中的二進制數(shù)據(jù)讀入到內(nèi)存中嘉栓,將其放在運行時數(shù)據(jù)區(qū)的方法區(qū)內(nèi)蛉威,然后在堆區(qū)創(chuàng)建一個java.lang.Class對象,用來封裝類在方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)嗤谚。類的加載的最終產(chǎn)品是位于堆區(qū)中的Class對象,Class對象封裝了類在方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)扁瓢,并且向Java程序員提供了訪問方法區(qū)內(nèi)的數(shù)據(jù)結(jié)構(gòu)的接口炉菲。

類的生命周期

類的生命周期包括這幾個部分堕战,加載、連接拍霜、初始化嘱丢、使用和卸載,其中前三部是類的加載的過程,如下圖祠饺;

加載越驻,查找并加載類的二進制數(shù)據(jù),在Java堆中也創(chuàng)建一個java.lang.Class類的對象

連接,連接又包含三塊內(nèi)容:驗證缀旁、準備记劈、初始化。1)驗證并巍,文件格式目木、元數(shù)據(jù)、字節(jié)碼懊渡、符號引用驗證刽射;2)準備,為類的靜態(tài)變量分配內(nèi)存剃执,并將其初始化為默認值誓禁;3)解析,把類中的符號引用轉(zhuǎn)換為直接引用

初始化肾档,為類的靜態(tài)變量賦予正確的初始值

使用摹恰,new出對象程序中使用

卸載,執(zhí)行垃圾回收

幾個小問題怒见?

1俗慈、JVM初始化步驟 ? 2速种、類初始化時機 姜盈?3、哪幾種情況下配阵,Java虛擬機將結(jié)束生命周期?

答案參考這篇文章jvm系列(一):java類的加載機制

類加載器

啟動類加載器:Bootstrap ClassLoader示血,負責加載存放在JDK\jre\lib(JDK代表JDK的安裝目錄棋傍,下同)下,或被-Xbootclasspath參數(shù)指定的路徑中的难审,并且能被虛擬機識別的類庫

擴展類加載器:Extension ClassLoader瘫拣,該加載器由sun.misc.Launcher$ExtClassLoader實現(xiàn),它負責加載DK\jre\lib\ext目錄中告喊,或者由java.ext.dirs系統(tǒng)變量指定的路徑中的所有類庫(如javax.*開頭的類)麸拄,開發(fā)者可以直接使用擴展類加載器。

應用程序類加載器:Application ClassLoader黔姜,該類加載器由sun.misc.Launcher$AppClassLoader來實現(xiàn)拢切,它負責加載用戶類路徑(ClassPath)所指定的類,開發(fā)者可以直接使用該類加載器

類加載機制

全盤負責秆吵,當一個類加載器負責加載某個Class時淮椰,該Class所依賴的和引用的其他Class也將由該類加載器負責載入,除非顯示使用另外一個類加載器來載入

父類委托,先讓父類加載器試圖加載該類主穗,只有在父類加載器無法加載該類時才嘗試從自己的類路徑中加載該類

緩存機制泻拦,緩存機制將會保證所有加載過的Class都會被緩存,當程序中需要使用某個Class時忽媒,類加載器先從緩存區(qū)尋找該Class争拐,只有緩存區(qū)不存在,系統(tǒng)才會讀取該類對應的二進制數(shù)據(jù)晦雨,并將其轉(zhuǎn)換成Class對象陆错,存入緩存區(qū)。這就是為什么修改了Class后金赦,必須重啟JVM音瓷,程序的修改才會生效

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市夹抗,隨后出現(xiàn)的幾起案子绳慎,更是在濱河造成了極大的恐慌,老刑警劉巖漠烧,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杏愤,死亡現(xiàn)場離奇詭異,居然都是意外死亡已脓,警方通過查閱死者的電腦和手機珊楼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來度液,“玉大人厕宗,你說我怎么就攤上這事《榈#” “怎么了已慢?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長霹购。 經(jīng)常有香客問我佑惠,道長,這世上最難降的妖魔是什么齐疙? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任膜楷,我火速辦了婚禮,結(jié)果婚禮上贞奋,老公的妹妹穿的比我還像新娘赌厅。我一直安慰自己,他們只是感情好忆矛,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布察蹲。 她就那樣靜靜地躺著请垛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洽议。 梳的紋絲不亂的頭發(fā)上宗收,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音亚兄,去河邊找鬼混稽。 笑死,一個胖子當著我的面吹牛审胚,可吹牛的內(nèi)容都是我干的匈勋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼膳叨,長吁一口氣:“原來是場噩夢啊……” “哼洽洁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起菲嘴,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤饿自,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后龄坪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體昭雌,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年健田,在試婚紗的時候發(fā)現(xiàn)自己被綠了烛卧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡妓局,死狀恐怖总放,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跟磨,我是刑警寧澤间聊,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站抵拘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏型豁。R本人自食惡果不足惜僵蛛,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望迎变。 院中可真熱鬧充尉,春花似錦、人聲如沸衣形。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至倒源,卻和暖如春苛预,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背笋熬。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工热某, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胳螟。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓昔馋,卻偏偏與公主長得像,于是被迫代替她去往敵國和親糖耸。 傳聞我的和親對象是個殘疾皇子秘遏,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

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

  • Java的核心是 JVM ,了解并熟悉JVM對于我們理解Java語言非常重要嘉竟。 一邦危、類加載機制 當程序主動使用某個...
    年少懵懂丶流年夢閱讀 1,088評論 2 15
  • 在編寫 Java 程序時,我們所編寫的 .java 文件經(jīng)編譯后周拐,生成能被 JVM 識別的 .class 文件铡俐,....
    EricAlpha閱讀 3,554評論 0 6
  • 一、類加載機制 1.定義: 把描述類的數(shù)據(jù)從Class文件加載到內(nèi)存妥粟,并對數(shù)據(jù)進行校驗审丘、轉(zhuǎn)換解析和初始化,最終形成...
    Ruheng閱讀 2,333評論 6 36
  • java 類加載機制簡析 類的加載:指的是 JVM 將類的 .class 文件中的二進制數(shù)據(jù)讀入到內(nèi)存中勾给,將其放在...
    蕪園樓主香獨秀閱讀 1,226評論 3 39
  • 類加載器 類加載器的作用 類加載器(class loader)用來加載Java類到Java 虛擬機中滩报。 一般來說,...
    LorenzoKing閱讀 310評論 0 0