真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JVM類加載機(jī)制及生命周期的詳細(xì)介紹

這篇文章主要講解了“JVM類加載機(jī)制及生命周期的詳細(xì)介紹”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“JVM類加載機(jī)制及生命周期的詳細(xì)介紹”吧!

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括漠河網(wǎng)站建設(shè)、漠河網(wǎng)站制作、漠河網(wǎng)頁制作以及漠河網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,漠河網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到漠河省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

一.目標(biāo):

1.什么是類的加載?

2.類的生命周期?

3.類加載器是什么?

4.雙親委派機(jī)制是什么?

二.原理 (類的加載過程及其最終產(chǎn)品):

JVM將class文件字節(jié)碼文件加載到內(nèi)存中, 并將這些靜態(tài)數(shù)據(jù)轉(zhuǎn)換成方法區(qū)中的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu),在堆(并不一定在堆中,HotSpot在方法區(qū)中)中生成一個(gè)代表這個(gè)類的java.lang.Class 對(duì)象,作為方法區(qū)類數(shù)據(jù)的訪問入口。

三.過程(類的生命周期):

JVM類加載機(jī)制分為五個(gè)部分:加載,驗(yàn)證,準(zhǔn)備,解析,初始化,下面我們就分別來看一下這五個(gè)過程。其中加載、檢驗(yàn)、準(zhǔn)備、初始化和卸載這個(gè)五個(gè)階段的順序是固定的,而解析則未必。為了支持動(dòng)態(tài)綁定,解析這個(gè)過程可以發(fā)生在初始化階段之后。

JVM類加載機(jī)制及生命周期的詳細(xì)介紹

加載:

加載過程主要完成三件事情:

  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. 在堆中生成一個(gè)代表此類的java.lang.Class對(duì)象,作為訪問方法區(qū)這些數(shù)據(jù)結(jié)構(gòu)的入口。

這個(gè)過程主要就是類加載器完成。

校驗(yàn):

此階段主要確保Class文件的字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會(huì)危害虛擬機(jī)的自身安全。

  1. 文件格式驗(yàn)證:基于字節(jié)流驗(yàn)證。

  2. 元數(shù)據(jù)驗(yàn)證:基于方法區(qū)的存儲(chǔ)結(jié)構(gòu)驗(yàn)證。

  3. 字節(jié)碼驗(yàn)證:基于方法區(qū)的存儲(chǔ)結(jié)構(gòu)驗(yàn)證。

  4. 符號(hào)引用驗(yàn)證:基于方法區(qū)的存儲(chǔ)結(jié)構(gòu)驗(yàn)證。

準(zhǔn)備:

為類變量分配內(nèi)存,并將其初始化為默認(rèn)值。(此時(shí)為默認(rèn)值,在初始化的時(shí)候才會(huì)給變量賦值)即在方法區(qū)中分配這些變量所使用的內(nèi)存空間。例如:

public static int value = 123;

此時(shí)在準(zhǔn)備階段過后的初始值為0而不是123;將value賦值為123的putstatic指令是程序被編譯后,存放于類構(gòu)造器方法之中.特例:

public static final int value = 123;

此時(shí)value的值在準(zhǔn)備階段過后就是123。

解析:

把類型中的符號(hào)引用轉(zhuǎn)換為直接引用。

  • 符號(hào)引用與虛擬機(jī)實(shí)現(xiàn)的布局無關(guān),引用的目標(biāo)并不一定要已經(jīng)加載到內(nèi)存中。各種虛擬機(jī)實(shí)現(xiàn)的內(nèi)存布局可以各不相同,但是它們能接受的符號(hào)引用必須是一致的,因?yàn)榉?hào)引用的字面量形式明確定義在Java虛擬機(jī)規(guī)范的Class文件格式中。

  • 直接引用可以是指向目標(biāo)的指針,相對(duì)偏移量或是一個(gè)能間接定位到目標(biāo)的句柄。如果有了直接引用,那引用的目標(biāo)必定已經(jīng)在內(nèi)存中存在

主要有以下四種:

  1. 類或接口的解析

  2. 字段解析

  3. 類方法解析

  4. 接口方法解析

初始化:

初始化階段是執(zhí)行類構(gòu)造器方法的過程。方法是由編譯器自動(dòng)收集類中的類變量的賦值操作和靜態(tài)語句塊中的語句合并而成的。虛擬機(jī)會(huì)保證方法執(zhí)行之前,父類的方法已經(jīng)執(zhí)行完畢。如果一個(gè)類中沒有對(duì)靜態(tài)變量賦值也沒有靜態(tài)語句塊,那么編譯器可以不為這個(gè)類生成()方法。

java中,對(duì)于初始化階段,有且只有以下五種情況才會(huì)對(duì)要求類立刻“初始化”(加載,驗(yàn)證,準(zhǔn)備,自然需要在此之前開始):

  1. 使用new關(guān)鍵字實(shí)例化對(duì)象、訪問或者設(shè)置一個(gè)類的靜態(tài)字段(被final修飾、編譯器優(yōu)化時(shí)已經(jīng)放入常量池的例外)、調(diào)用類方法,都會(huì)初始化該靜態(tài)字段或者靜態(tài)方法所在的類。

  2. 初始化類的時(shí)候,如果其父類沒有被初始化過,則要先觸發(fā)其父類初始化。

  3. 使用java.lang.reflect包的方法進(jìn)行反射調(diào)用的時(shí)候,如果類沒有被初始化,則要先初始化。

  4. 虛擬機(jī)啟動(dòng)時(shí),用戶會(huì)先初始化要執(zhí)行的主類(含有main)

  5. jdk 1.7后,如果java.lang.invoke.MethodHandle的實(shí)例最后對(duì)應(yīng)的解析結(jié)果是 REF_getStatic、REF_putStatic、REF_invokeStatic方法句柄,并且這個(gè)方法所在類沒有初始化,則先初始化。

四.類加載器:

把類加載階段的“通過一個(gè)類的全限定名來獲取描述此類的二進(jìn)制字節(jié)流”這個(gè)動(dòng)作交給虛擬機(jī)之外的類加載器來完成。這樣的好處在于,我們可以自行實(shí)現(xiàn)類加載器來加載其他格式的類,只要是二進(jìn)制字節(jié)流就行,這就大大增強(qiáng)了加載器靈活性。系統(tǒng)自帶的類加載器分為三種:

  1. 啟動(dòng)類加載器。

  2. 擴(kuò)展類加載器。

  3. 應(yīng)用程序類加載器。

五.雙親委派機(jī)制:

JVM類加載機(jī)制及生命周期的詳細(xì)介紹

雙親委派機(jī)制工作過程:

如果一個(gè)類加載器收到了類加載器的請(qǐng)求.它首先不會(huì)自己去嘗試加載這個(gè)類.而是把這個(gè)請(qǐng)求委派給父加載器去完成.每個(gè)層次的類加載器都是如此.因此所有的加載請(qǐng)求最終都會(huì)傳送到Bootstrap類加載器(啟動(dòng)類加載器)中.只有父類加載反饋?zhàn)约簾o法加載這個(gè)請(qǐng)求(它的搜索范圍中沒有找到所需的類)時(shí).子加載器才會(huì)嘗試自己去加載。

雙親委派模型的優(yōu)點(diǎn):java類隨著它的加載器一起具備了一種帶有優(yōu)先級(jí)的層次關(guān)系.

例如類java.lang.Object,它存放在rt.jart之中.無論哪一個(gè)類加載器都要加載這個(gè)類.最終都是雙親委派模型最頂端的Bootstrap類加載器去加載.因此Object類在程序的各種類加載器環(huán)境中都是同一個(gè)類.相反.如果沒有使用雙親委派模型.由各個(gè)類加載器自行去加載的話.如果用戶編寫了一個(gè)稱為“java.lang.Object”的類.并存放在程序的ClassPath中.那系統(tǒng)中將會(huì)出現(xiàn)多個(gè)不同的Object類.java類型體系中最基礎(chǔ)的行為也就無法保證.應(yīng)用程序也將會(huì)一片混亂.

感謝各位的閱讀,以上就是“JVM類加載機(jī)制及生命周期的詳細(xì)介紹”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)JVM類加載機(jī)制及生命周期的詳細(xì)介紹這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)頁名稱:JVM類加載機(jī)制及生命周期的詳細(xì)介紹
本文來源:http://weahome.cn/article/ihiode.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部