摘要:,初始化的時(shí)候,如果發(fā)現(xiàn)父類沒有初始化,則需要先對(duì)父類初始化。,虛擬機(jī)會(huì)保證一個(gè)類的方法在多線程的環(huán)境下被正確的枷鎖同步。類加載的過程首先類加載將變量和靜態(tài)代碼塊放到類的初始化的方法里面,初始化之后才對(duì)象,執(zhí)行
類加載
類加載的3個(gè)過程
類加載器
1,加載
將class文件字節(jié)碼內(nèi)容加載到內(nèi)存中(字節(jié)碼的來源很多) 并將這些靜態(tài)的數(shù)據(jù)轉(zhuǎn)換成方法區(qū)中運(yùn)行是的數(shù)據(jù)結(jié)構(gòu)(二進(jìn)制的數(shù)據(jù)),在堆中生存一個(gè)代表這個(gè)類的java.lang.Class對(duì)象,作為方法區(qū)類數(shù)據(jù)訪問入口
2,鏈接
將java類的二進(jìn)制代碼合并到j(luò)vm的運(yùn)行狀態(tài)之中的過程 1),驗(yàn)證: 確保加載的類信息符合jvm的規(guī)范,沒有安全方面的問題 2),準(zhǔn)備: 正式為類變量(static變量)分配內(nèi)存 并且設(shè)置類變量初始化值(全部都是初始默認(rèn)值),這些內(nèi)存都在方法區(qū)中進(jìn)行 3),解析 虛擬機(jī)常量池的符號(hào)引用代替換為直接引用的過程int a = 1;轉(zhuǎn)換為直接引用
3, 初始化
1),初始化就是執(zhí)行類類構(gòu)造器
2),初始化的時(shí)候,如果發(fā)現(xiàn)父類沒有初始化,則需要先對(duì)父類初始化。
3),虛擬機(jī)會(huì)保證一個(gè)類的
4),當(dāng)訪問一個(gè)類的靜態(tài)域的時(shí)候,只有真正聲明這個(gè)域的類才會(huì)被初始化。
/** * 類加載的過程 * 首先類加載 將變量和static靜態(tài)代碼塊放到類的初始化的方法里面,初始化之后才new對(duì)象,執(zhí)行static * @author Administrator * */ public class Demo01 { public static void main(String[] args) { A a = new A(); System.out.println(A.width); } } class A{ public static int width = 100; static{ System.out.println("initialized model A"); width = 300; } public A(){ System.out.println("generating A object"); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64867.html
摘要:類加載過程雙親委派模型聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處類加載過程類加載機(jī)制將類描述數(shù)據(jù)從文件中加載到內(nèi)存,并對(duì)數(shù)據(jù)進(jìn)行,解析和初始化,最終形成被直接使用的類型。深入理解虛擬機(jī)高級(jí)特性與最佳實(shí)踐加載加載階段由類加載器負(fù)責(zé),過程見類加載 JVM類加載過程 & 雙親委派模型 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處https://segmentfault.com/u/yzwall ...
任何程序都需要加載到內(nèi)存才能與CPU進(jìn)行交流 同理, 字節(jié)碼.class文件同樣需要加載到內(nèi)存中,才可以實(shí)例化類 ClassLoader的使命就是提前加載.class 類文件到內(nèi)存中 在加載類時(shí),使用的是Parents Delegation Model(溯源委派加載模型) Java的類加載器是一個(gè)運(yùn)行時(shí)核心基礎(chǔ)設(shè)施模塊,主要是在啟動(dòng)之初進(jìn)行類的加載、鏈接、初始化 showImg(https://s...
摘要:學(xué)習(xí)能更深入的理解這門語言,能理解語言底層的執(zhí)行過程,深入到字節(jié)碼層次。 目錄 ? 前言 程序的運(yùn)行 1.JVM類加載機(jī)制 ①一般在什么情況下會(huì)去加載一個(gè)類?也就是說,什么時(shí)候.class字節(jié)碼文件中加載這個(gè)類到JVM內(nèi)存里來? ②驗(yàn)證、準(zhǔn)備、初始化 ③初始化 2.類加載器和雙親委派機(jī)制 ...
摘要:執(zhí)行引擎作用執(zhí)行字節(jié)碼,或者執(zhí)行本地方法運(yùn)行時(shí)數(shù)據(jù)區(qū)其實(shí)就是指在運(yùn)行期間,其對(duì)內(nèi)存空間的劃分和分配。 雖是讀書筆記,但是如轉(zhuǎn)載請(qǐng)注明出處https://uestc-dpz.github.io..拒絕伸手復(fù)制黨 JVM Java 虛擬機(jī) Java 虛擬機(jī)(Java virtual machine,JVM)是運(yùn)行 Java 程序必不可少的機(jī)制。JVM實(shí)現(xiàn)了Java語言最重要的特征:即平臺(tái)...
摘要:類加載過程共分為加載驗(yàn)證準(zhǔn)備解析初始化使用和卸載七個(gè)階段這些階段通常都是互相交叉的混合式進(jìn)行的,通常會(huì)在一個(gè)階段執(zhí)行的過程中調(diào)用或激活另外一個(gè)階段。 JVM類加載過程共分為加載、驗(yàn)證、準(zhǔn)備、解析、初始化、使用和卸載七個(gè)階段showImg(https://segmentfault.com/img/bV0D9R?w=634&h=203);這些階段通常都是互相交叉的混合式進(jìn)行的,通常會(huì)在一個(gè)...
摘要:而字節(jié)碼運(yùn)行在之上,所以不用關(guān)心字節(jié)碼是在哪個(gè)操作系統(tǒng)編譯的,只要符合規(guī)范,那么,這個(gè)字節(jié)碼文件就是可運(yùn)行的。好處防止內(nèi)存中出現(xiàn)多份同樣的字節(jié)碼安全性角度特別說明類加載器在成功加載某個(gè)類之后,會(huì)把得到的類的實(shí)例緩存起來。 前言 只有光頭才能變強(qiáng) JVM在準(zhǔn)備面試的時(shí)候就有看了,一直沒時(shí)間寫筆記?,F(xiàn)在到了一家公司實(shí)習(xí),閑的時(shí)候就寫寫,刷刷JVM博客,刷刷電子書。 學(xué)習(xí)JVM的目的也很簡單...
閱讀 2349·2021-11-24 09:39
閱讀 3794·2021-11-19 09:40
閱讀 2166·2021-09-27 13:36
閱讀 1907·2019-08-30 15:44
閱讀 404·2019-08-30 13:52
閱讀 2720·2019-08-30 11:13
閱讀 2203·2019-08-29 16:18
閱讀 1768·2019-08-29 15:43