JVM系列(一)類加載

1 、什么是類加載

我們所開發(fā)的程序是如何被加載至jvm中運行的,將我們開發(fā)的java項目打包成jar包或者war包,實際是將.java文件編譯成為.class字節(jié)碼文件,然后通過類加載器加載至jvm中運行,供后續(xù)代碼運行使用。

?如下圖:

2 、類加載的過程

我們的代碼經(jīng)歷了 以下五個階段

加載 —>驗證?—>準(zhǔn)備?—>解析?—>初始化

加載階段:當(dāng)我們在代碼中使用到的類就會進(jìn)行加載,也就是hello.class調(diào)用user.class的時候,就會將字節(jié)碼文件加載至jvm內(nèi)存中。

驗證階段:進(jìn)行驗證我們開發(fā)的代碼編譯后的.class文件是否合法是否符合JVM規(guī)范,驗證通過后才能交給JVM來運行

準(zhǔn)備階段:當(dāng)字節(jié)碼文件驗證通過后,就會進(jìn)行準(zhǔn)備工作,給這個類? ? (user、hello)分配一定的內(nèi)存空間,然后會給類中的變量分配內(nèi)存空間,在給變量賦予初始值。

解析階段:解析是將符號引用替換為直接引用,主要針對類或接口、對象、字段、方法進(jìn)行解析。

初始化階段:也是核心階段, 執(zhí)行準(zhǔn)備階段的任務(wù),會給類變量開辟內(nèi)存空間和設(shè)置初始值,這段賦值代碼就是在初始化階段來執(zhí)行的。在實例化對象就會觸發(fā)(實例化對象時候 會觸發(fā)初始化 先初始化父類)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一個Java類從被加載到虛擬機(jī)內(nèi)存到被卸載出內(nèi)存為止,生命周期一共包括如下幾個階段: 加載(Loading) 驗證...
    Lebens閱讀 411評論 2 0
  • 代碼編譯的結(jié)果從本地機(jī)器碼轉(zhuǎn)變?yōu)樽止?jié)碼,是存儲格式發(fā)展的一小步,卻是編程語言發(fā)展的一大步。 前面我們學(xué)習(xí)了Clas...
    tracy_668閱讀 314評論 0 0
  • 本篇將了解類加載機(jī)制和雙親委派模型這兩大知識考點: 概述 類加載全過程 類加載器&雙親委派模型 1.概述 a.JV...
    厘米姑娘閱讀 3,400評論 0 18
  • 當(dāng)我們在Java代碼中寫下new String()的時候,我們理所當(dāng)然認(rèn)為java會返回給我們一個String對象...
    趙軍林閱讀 162評論 0 0
  • 1、ClassLoader Java程序并不是一個原生的可執(zhí)行文件,而是由許多獨立的類文件組成,每一個文件對應(yīng)一個...
    冰河winner閱讀 581評論 0 2

友情鏈接更多精彩內(nèi)容