国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 Java Java基礎(chǔ) jvm類加載過程有哪些階段

jvm類加載過程有哪些階段

Jul 27, 2021 am 11:43 AM

類加載過程:1、加載階段;2、驗(yàn)證階段;3、準(zhǔn)備階段,主要是將類變量在方法區(qū)進(jìn)行內(nèi)存分配并進(jìn)行初始化;4、解析階段;5、初始化階段,編譯器會將類文件聲明的靜態(tài)賦值變量和靜態(tài)區(qū)域合并生成cinit方法并進(jìn)行調(diào)用;6、使用階段;7、卸載階段。

jvm類加載過程有哪些階段

本教程操作環(huán)境:windows7系統(tǒng)、java8版、DELL G3電腦。

理解JVM的類加載過程,主要要回答兩個(gè)問題:

1、類在什么時(shí)候被加載。

2、類是怎樣被加載的。

load

一、觸發(fā)類加載的條件:

類的加載過程主要分為七個(gè)階段:加載、驗(yàn)證、準(zhǔn)備、解析、初始化、使用、卸載;加載、驗(yàn)證、準(zhǔn)備、初始化、卸載這五個(gè)過程順序是確定的,jvm必須嚴(yán)格按照這個(gè)順序執(zhí)行,jvm沒有規(guī)定類加載的時(shí)機(jī),但卻嚴(yán)格規(guī)定了五種情況下必須立即對類進(jìn)行初始化,加載自然要在此之前。

1、遇到new、getstatic、putstatic、invokestatic這四條指令時(shí),如果類沒有被初始化,則首先對類進(jìn)行初始化。

2、使用java.lang.reflect包的方法對類進(jìn)行反射調(diào)用時(shí),若類沒有進(jìn)行初始化,則觸發(fā)其初始化。

3、當(dāng)初始化一個(gè)類時(shí)假如該類的父類沒有進(jìn)行初始化,首先觸發(fā)其父類的初始化。

4、運(yùn)行JVM必須指定一個(gè)含有main方法的主類,虛擬機(jī)會先初始化這個(gè)類。

5、當(dāng)使用Jdk1.7的動(dòng)態(tài)語言支持時(shí),如果一個(gè)java.lang.invoke.MethodHandle實(shí)例最后的解析結(jié)果REF_getstatic、REF_putstatic、REF_inokestatic的方法句柄,并且這個(gè)方法句柄所對應(yīng)的類沒有進(jìn)行初始化時(shí),觸發(fā)該類初始化。

二、類加載過程

類加載過程主要分為七個(gè)階段:加載、驗(yàn)證、準(zhǔn)備、解析、初始化、使用、卸載。

1、加載:

1)、通過一個(gè)類的全限定名加載該類對應(yīng)的二進(jìn)制字節(jié)流。主要通過類加載器實(shí)現(xiàn)。

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

3)、在內(nèi)存中生成一個(gè)代表這個(gè)類的java.lang.Class對象,作為方法區(qū)各個(gè)類訪問該類的入口。(Hotspot 在方法區(qū)生成該類)。

2、驗(yàn)證:

1)、文件格式驗(yàn)證:驗(yàn)證類文件的魔術(shù)版本號常量等是否符合當(dāng)前虛擬機(jī)支持的范圍。

2)、元數(shù)據(jù)驗(yàn)證:驗(yàn)證類的語義信息,是否符合java語言規(guī)范的要求。

3)、字節(jié)碼驗(yàn)證:驗(yàn)證程序語義是合法的、合乎規(guī)范的。主要通過stackmapframe結(jié)構(gòu)。

4)、符號引用驗(yàn)證:虛擬機(jī)在將符號引用轉(zhuǎn)化為直接引用,驗(yàn)證符號引用全限定名代表的類是否能夠找到,對應(yīng)的域和方法是否能找到,訪問權(quán)限是否合法。

3、準(zhǔn)備:

準(zhǔn)備階段主要是將類變量(被static修飾符修飾)在方法區(qū)進(jìn)行內(nèi)存分配并進(jìn)行初始化。

數(shù)據(jù)類型 零值 數(shù)據(jù)類型 零值
int 0 boolean false
long 0L float 0.0f
short 0 double 0.0d
char '\u0000' reference null
byte 0 ? ?

4、解析:

1)、類或接口解析:將符合引用轉(zhuǎn)化為類的直接引用,并檢查訪問權(quán)限。

2)、字段解析:將字段的符號引用轉(zhuǎn)化為字段所屬的類信息或其父類該字段的直接引用,并檢查訪問權(quán)限。

3)、類方法解析:將類方法的符號引用轉(zhuǎn)化為類方法所屬的類信息或其父類該字段的直接引用,并檢查訪問權(quán)限。

4)、接口方法解析:將接口方法的符號引用轉(zhuǎn)化為接口方法所屬的接口信息或其父類該字段的直接引用,并檢查訪問權(quán)限。

5、初始化:

初始化階段編譯器會將類文件聲明的靜態(tài)賦值變量和靜態(tài)區(qū)域合并生成方法并進(jìn)行調(diào)用。

類加載器:類加載器是“通過一個(gè)類的全限定名加載這個(gè)類的二進(jìn)制字節(jié)流”的實(shí)現(xiàn),對于任何一個(gè)類,都是由類加載器和該類的本身共同確定在虛擬機(jī)中的唯一性。

雙親委派模型:

delegation

1、Bootstrap ClassLoader 啟動(dòng)類加載器,負(fù)責(zé)加載/lib/rt.jar.

2、Extension ClassLoader 拓展類加載器,負(fù)責(zé)加載/lib/ext底下的包

3、Application? ClassLoader 應(yīng)用類加載器,負(fù)責(zé)加載CLASSPATH路徑下的JAVA類庫。

4、User?ClassLoader 用戶自定義的類加載器。

雙親委托模型采用這樣的方式加載類:當(dāng)類加載器收到加載類請求時(shí),首先委托父類加載該類,所有類加載器都采用這種方式,因此所有類加載請求都會到達(dá)頂層父類,父類加載不到時(shí)再使用該類加載器中加載。這樣,類加載器之間就有了一種層級關(guān)系,能夠保證Java的基礎(chǔ)類由相同的類加載器加載,對Java系統(tǒng)的穩(wěn)定性起到至關(guān)重要的作用。

相關(guān)視頻教程推薦:Java視頻教程

以上是jvm類加載過程有哪些階段的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276