国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Java虛擬機(jī)JVM類加載機(jī)制(從類文件到虛擬機(jī))

瀏覽:84日期:2022-08-11 11:14:48
目錄一、類加載機(jī)制簡介二、類加載機(jī)制過程 2.1、加載(Load)2.2、連接(Linking)2.3、初始化(Initialize)三、類加載器Classloader 3.1、類加載器簡介3.2、類加載器分類3.3、雙親委派一、類加載機(jī)制簡介

什么是類的加載

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

Java虛擬機(jī)JVM類加載機(jī)制(從類文件到虛擬機(jī))

類加載機(jī)制:所謂的類加載機(jī)制就是虛擬機(jī)將class文件加載到內(nèi)存,并對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,轉(zhuǎn)換解析和初始化,形成虛擬機(jī)可以直接使用的java類型(即java.lang.class)

JVM的類加載機(jī)制分為五個(gè)部分:加載,驗(yàn)證,準(zhǔn)備,解析,初始化,圖示:

Java虛擬機(jī)JVM類加載機(jī)制(從類文件到虛擬機(jī))

二、類加載機(jī)制過程 2.1、加載(Load)

所謂JVM加載過程,是查找和導(dǎo)入class文件,加載過程:

(1)通過類的全限定名獲取這個(gè)類的二進(jìn)制字節(jié)流;

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

Java虛擬機(jī)JVM類加載機(jī)制(從類文件到虛擬機(jī))

(3)在JVM堆中生成代表這個(gè)類的java.lang.class對(duì)象(作為方法區(qū)中這些數(shù)據(jù)的訪問入口)

Java虛擬機(jī)JVM類加載機(jī)制(從類文件到虛擬機(jī))

2.2、連接(Linking)

2.2.1、驗(yàn)證(Verify)

JVM驗(yàn)證(Verify)這個(gè)過程是為了保證被加載類的正確性,保證其它后續(xù)步驟的正確正常執(zhí)行,驗(yàn)證的過程包括:

文件格式驗(yàn)證 元數(shù)據(jù)驗(yàn)證 字節(jié)碼驗(yàn)證 符號(hào)引用驗(yàn)證

2.2.2、準(zhǔn)備(Prepare)

準(zhǔn)備(Prepare)階段,是為類變量分配內(nèi)存并設(shè)置初始化值的。

eg:

public static int v = 9092;

注意:在類加載的準(zhǔn)備(Prepare)階段,v變量是賦值為0的而不是9092,這個(gè)值是在后續(xù)過程才賦值的

private static int i;public static void main(String[] args) { // 正常打印出0,靜態(tài)變量在類加載的準(zhǔn)備階段會(huì)賦值0 System.out.println(i);}

public static void main(String[] args) { // 編譯報(bào)錯(cuò),因?yàn)榫植孔兞繘]賦值不會(huì)自動(dòng)生成初始化值 int i; System.out.println(i);}

2.2.3、解析(Resolve)

這個(gè)階段是將常量池中的符號(hào)引用轉(zhuǎn)換為直接引用的過程。所謂符號(hào)引用就是class文件中的:

1. CONSTANT_Class_info2. CONSTANT_Field_info3. CONSTANT_Method_info// 等等...

直接引用可以是指向目標(biāo)的指針,相對(duì)偏移量或是一個(gè)能間接定位到目標(biāo)的句柄。

直接引用和字符引用一個(gè)最明顯的區(qū)別是,直接引用是目標(biāo)是已經(jīng)被加載到內(nèi)存的,而字符引用并不一定已經(jīng)加載到內(nèi)存。

2.3、初始化(Initialize)

類加載的初始化階段,是對(duì)類的變量和代碼塊執(zhí)行初始化操作,是執(zhí)行類構(gòu)造器的過程,換句話說是對(duì)類的靜態(tài)變量,靜態(tài)代碼塊執(zhí)行初始化操作

三、類加載器Classloader 3.1、類加載器簡介

類的加載過程是在JVM之外的,目的是為了讓應(yīng)用程序決定如何獲取需要的類。

類加載,也即類加載器通過類的全限定名獲取其定義的二進(jìn)制字節(jié)流,顧名思義,類加載器就是來加載class文件的。

3.2、類加載器分類

類加載器可以分為啟動(dòng)類加載器,拓展類加載器,應(yīng)用程序類加載器

Java虛擬機(jī)JVM類加載機(jī)制(從類文件到虛擬機(jī))

1)、 Bootstrap classload(啟動(dòng)類加載器):負(fù)責(zé)加載$JAVA_HOME中jre/lib/rt.jar里所有的class或者--Xbootclasspath系統(tǒng)參數(shù)指定路徑下的jar包。這個(gè)實(shí)現(xiàn)是由c++實(shí)現(xiàn)的 2)、Extension Classload(拓展類加載器):負(fù)責(zé)加載java平臺(tái)中拓展的一些jar,包括$JAVA_HOME中jre/lib/ext/*.jar或者-Djava.ext.dirs指定目錄下的jar包 3)、Application Classload(應(yīng)用程序類加載器):負(fù)責(zé)加載classpath中指定的jar或者Djava.class.path指定路徑的類和jar包 4)、custom classload(自定義的類加載器):通過java.lang.ClassLoader的子類實(shí)現(xiàn)的類,屬于程序根據(jù)需要自定義拓展的類加載器,如tomcat、jboss都會(huì)根據(jù)j2ee規(guī)范自行實(shí)現(xiàn)ClassLoader3.3、雙親委派

類的加載原則:按照“雙親委派”的原則加載的,當(dāng)一個(gè)類收到了類加載請(qǐng)求,他首先不會(huì)嘗試自己去加載這個(gè)類,而是把這個(gè)請(qǐng)求委派給父類去完成,每一個(gè)層次類加載器都是如此也即class類的加載,按照自頂向下的規(guī)則,由Bootstrap Classload到custom classload,就是由上層的加載類來加載類

目的:不管是哪個(gè)加載器加載這個(gè)類,最終都是委托給頂層的啟動(dòng)類加載器進(jìn)行加載,保證了使用不同的類加載器最終得到的都是同樣一個(gè) Object 對(duì)象。

附錄:參數(shù)資料

https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

以上就是Java JVM類加載機(jī)制(從類文件到虛擬機(jī))的詳細(xì)內(nèi)容,更多關(guān)于JVM類加載機(jī)制的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 特黄毛片| 婷婷三级 | 67id人成国产在线 | 亚洲国产天堂在线网址 | 蘑菇午夜三级 | 日韩一级欧美一级一级国产 | 成人久久精品一区二区三区 | 国产一级生活片 | 国产精品亚洲天堂 | 免费一级网站免费 | 国产亚洲精品久久久久久久网站 | 日本视频在线免费观看 | 亚洲日本欧美产综合在线 | 自拍国内 | 国产成人艳妇在线观看 | 欧美一级高清毛片aaa | 99久久伊人一区二区yy5099 | 亚洲免费网站观看视频 | 国产三级做爰高清在线 | www.夜夜骑.com | 看免费人成va视频全 | 国产欧美日韩一区二区三区在线 | 成人亚洲精品7777 | 国产精品观看在线亚洲人成网 | 日本在线视频免费看 | 亚洲性无码av在线 | 久热国产在线视频 | 一级淫片免费视频 | 在线私拍国产福利精品 | 亚洲欧美国产精品久久久 | 宅女深夜福利视频在线 | 88精品视频 | 99久久精品免费看国产 | 在线视频一区二区三区 | 91久久亚洲最新一本 | 九九九九在线精品免费视频 | 久久国产成人亚洲精品影院老金 | 国产亚洲精品久久久久久久网站 | 理论片日韩 | 免费国产综合视频在线看 | 亚洲美女福利视频在线 |