一譬巫、虛擬機(jī)執(zhí)行代碼過(guò)程
windows虛擬機(jī)執(zhí)行代碼流程:
1.運(yùn)行代碼>
2.java.exe 底層調(diào)用 jvm.dll 啟動(dòng)jvm虛擬機(jī)>
3.啟動(dòng)引導(dǎo)類(lèi)加載器(c++實(shí)現(xiàn))>
4. 調(diào)用Launcher.getLauncher()方法,創(chuàng)建其他類(lèi)加載器>
5.最后會(huì)使用AppClassLoader loadClass()加載本類(lèi)咖楣;
6.執(zhí)行程序>7.最終jvm銷(xiāo)毀
二、類(lèi)加載過(guò)程 loadClass()
加載-----------》驗(yàn)證-----------》準(zhǔn)備-----------》解析-----------》初始化
加載:通過(guò)文件io讀取類(lèi)的字節(jié)碼文件(二進(jìn)制文件)芦昔,直到使用時(shí)诱贿,才會(huì)加載;例如new 一個(gè)對(duì)象咕缎,和調(diào)用類(lèi)中的main()方法時(shí)珠十;在內(nèi)存中會(huì)生成一個(gè)對(duì)應(yīng)的class文件,作為方法區(qū)的對(duì)這個(gè)類(lèi)的訪問(wèn)入口凭豪;
驗(yàn)證:驗(yàn)證類(lèi)字節(jié)碼文件是否正確
準(zhǔn)備:初始化類(lèi)中的靜態(tài)變量賦值為初始化值
解析:運(yùn)行時(shí)將類(lèi)中的靜態(tài)方法 也就是字面量在運(yùn)行時(shí)將字面量的焙蹭,將引用替換為直接引用,句柄或者直接指針也稱為靜態(tài)連接
初始化:將靜態(tài)變量賦值嫂伞,執(zhí)行靜態(tài)代碼塊
三孔厉、類(lèi)加載器介紹
四、雙親委派機(jī)制
什么是雙親委派機(jī)制帖努?
雙親委派機(jī)制是jvm類(lèi)加載器設(shè)計(jì)的一個(gè)加載機(jī)制撰豺,保證被加載類(lèi)的唯一性(只加載一次),為什么會(huì)設(shè)計(jì)雙親委派機(jī)制拼余,沙箱安全機(jī)制可以防止自己核心api被別人惡意篡改污桦;
核心代碼:
雙親委派機(jī)制:簡(jiǎn)單User.class加載流程
學(xué)習(xí)是枯燥無(wú)味的,但是如果你認(rèn)真了匙监,你會(huì)發(fā)現(xiàn)其中的樂(lè)趣凡橱,你就不會(huì)覺(jué)得枯燥了??小作,最近也會(huì)陸續(xù)再出一下關(guān)于虛擬機(jī)的文章,有興趣的小伙伴可以加我的微信或者qq溝通一起學(xué)習(xí)和進(jìn)步K笪啤躲惰!
以上就是我對(duì)虛擬機(jī)執(zhí)行代碼的過(guò)程以及類(lèi)的加載過(guò)程的理解致份,其中如果哪里有些不足变抽,歡迎大家可以在評(píng)論區(qū)留言指出。