小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Class類文件加載機制

 gaoshenmu 2016-09-11

在class文件中描述的各種信息,最終都需要被加載到虛擬機中之后,才能被運行和使用。

虛擬機把描述類的數(shù)據(jù)從class文件加載到內(nèi)存,并對數(shù)據(jù)進行校驗,轉(zhuǎn)換,解析和初始化,最終形成可以被虛擬機直接使用的java類型,這就是虛擬機的類加載機制。

類加載的時機:

類從被加載到虛擬機內(nèi)存開始,到卸載出內(nèi)存為止,其生命周期包括:

加載(loading),驗證(verification),準備(preparation),解析(resolution),初始化(initialization),使用(using),卸載(unloading)。

需要對類進行初始化的情況:

1.遇到new,jestatic,putstatic,invokestatic這四條字節(jié)碼指令。
場景:使用new關(guān)鍵字實例化對象,讀取或設(shè)置一個類的靜態(tài)字段,調(diào)用一個類的靜態(tài)方法
2.使用java.lang.Reflect包的方法對類進行反射調(diào)用時。
3.當(dāng)初始化一個類的時候,如果發(fā)現(xiàn)其父類還沒有進行過初始化。

類加載過程:

加載:

1.通過一個類的全限定名來獲取定義此類的二進制字節(jié)流。
2.將這個字節(jié)流所代表的靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運行時數(shù)據(jù)結(jié)構(gòu)
3.在java堆中生成代表這個類的java.lang.Class對象,作為方法區(qū)這些數(shù)據(jù)的訪問入口。

驗證:

具體包括

1.文件格式驗證;
2.元數(shù)據(jù)驗證;
3.字節(jié)碼驗證;
4.符號引用驗證;

準備:

準備階段是正式為類變量分配內(nèi)存并設(shè)置類變量初始值的階段,這些內(nèi)存都將在方法區(qū)進行分配。

注意:這時候進行內(nèi)存分配的僅包括類變量(被static修飾的變量),而不包括實例變量,實例變量將在對象實例化的時候隨著對象的實例一起被分配到j(luò)ava堆中。

解析:

虛擬機將常量池內(nèi)的符號引用替換為直接引用的過程

初始化:

到初始化階段,才真正開始執(zhí)行類中定義的java程序代碼;

類加載器:“通過一個類的全限定名來獲取描述此類的二進制字節(jié)流”,實現(xiàn)這個動作的代碼模塊稱為“類加載器”。

這里寫圖片描述

雙親委派機制:如果一個類加載器收到了類加載的請求,它首先不會嘗試自己去加載這個類,而是把這個請求委派給父類加載器去完成,每一層的類加載器都是如此,因此所有的加載請求最終都應(yīng)該被傳送到頂層啟動類的加載器中,只有父加載器反饋自己無法完成加載請求時,子加載器才會嘗試自己去加載。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多