目錄
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比康巴什網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式康巴什網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋康巴什地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。一、JVM類加載機(jī)制
一、類加載的過(guò)程
1.加載
2.鏈接
3.初始化
初始化順序
二、類加載時(shí)機(jī)
三、雙親委派機(jī)制
雙親委派機(jī)制優(yōu)勢(shì)
?當(dāng)程序主動(dòng)使用某個(gè)類時(shí),如果該類還未被加載到內(nèi)存中,則JVM會(huì)通過(guò)加載、連接、初始化3個(gè)步驟來(lái)對(duì)該類進(jìn)行初始化。
?在這個(gè)階段,JVM 的主要目的是將字節(jié)碼從各個(gè)位置(網(wǎng)絡(luò)、磁盤等)轉(zhuǎn)化為二進(jìn)制字節(jié)流加載到內(nèi)存中,接著會(huì)為這個(gè)類在 JVM 的方法區(qū)創(chuàng)建一個(gè)對(duì)應(yīng)的 Class 對(duì)象,這個(gè) Class 對(duì)象就是這個(gè)類各種數(shù)據(jù)的訪問(wèn)入口。
1.加載就是將已經(jīng)讀入內(nèi)存的類的二進(jìn)制數(shù)據(jù)合并到JVM運(yùn)行時(shí)環(huán)境中去,包含以下步驟:
?驗(yàn)證
檢驗(yàn)被加載的類是否有正確的內(nèi)部結(jié)構(gòu),并和其他類協(xié)調(diào)一致。
準(zhǔn)備
準(zhǔn)備階段則負(fù)責(zé)為類的靜態(tài)屬性分配內(nèi)存,并設(shè)置java語(yǔ)言默認(rèn)初始值;不包含final修飾的static實(shí)例變量,在編譯時(shí)進(jìn)行初始化。不會(huì)為類成員變量初始化。
解析
將類的二進(jìn)制數(shù)據(jù)中的符號(hào)引用替換成直接引用。
3.初始化到了初始化階段,用戶定義的 Java 程序代碼才真正開(kāi)始執(zhí)行。在這個(gè)階段,JVM 會(huì)根據(jù)語(yǔ)句執(zhí)行順序?qū)︻悓?duì)象進(jìn)行初始化。
準(zhǔn)備階段和初始化階段看似有點(diǎn)矛盾,其實(shí)是不矛盾的,如果類中有語(yǔ)句:private static int a = 10,它的執(zhí)行過(guò)程是這樣的,首先字節(jié)碼文件被加載到內(nèi)存后,先進(jìn)行鏈接的驗(yàn)證這一步驟,驗(yàn)證通過(guò)后準(zhǔn)備階段,給a分配內(nèi)存,因?yàn)樽兞縜是static的,所以此時(shí)a等于int類型的默認(rèn)初始值0,即a=0,然后到解析(后面在說(shuō)),到初始化這一步驟時(shí),才把a(bǔ)的真正的值10賦給a,此時(shí)a=10。
?注意:對(duì)于一個(gè)final類型的靜態(tài)變量,如果該變量的值在編譯時(shí)就可以確定下來(lái),那么這個(gè)變量相當(dāng)于“宏變量”。Java編譯器會(huì)在編譯時(shí)直接把這個(gè)變量出現(xiàn)的地方替換成它的值,因此即使程序使用該靜態(tài)變量,也不會(huì)導(dǎo)致該類的初始化。反之,如果final類型的靜態(tài)Field的值不能在編譯時(shí)確定下來(lái),則必須等到運(yùn)行時(shí)才可以確定該變量的值,如果通過(guò)該類來(lái)訪問(wèn)它的靜態(tài)變量,則會(huì)導(dǎo)致該類被初始化。
初始化順序? 1. 創(chuàng)建類的實(shí)例,也就是new一個(gè)對(duì)象
? 2. 訪問(wèn)某個(gè)類或接口的靜態(tài)變量,或者對(duì)該靜態(tài)變量賦值
? 3. 調(diào)用類的靜態(tài)方法
? 4. 反射(Class.forName("com.lyj.load"))
? 5. 初始化一個(gè)類的子類(會(huì)首先初始化子類的父類)
? 6. 用戶指定一個(gè)要執(zhí)行的主類(包含main()方法的那個(gè)類),虛擬機(jī)會(huì)先初始化這個(gè)主類 ??
?如果一個(gè)類加載器收到了類加載請(qǐng)求,它并不會(huì)自己先去加載,而是把這個(gè)請(qǐng)求委托給父類的加載器執(zhí)行,如果父類加載器還存在其父類加載器,則進(jìn)一步向上委托,依次遞歸,請(qǐng)求最終將到達(dá)頂層的啟動(dòng)類加載器,若父加載器無(wú)法完成此加載任務(wù),子加載器才會(huì)嘗試自己去加載,直至記載完成。
? 1.避免類的重復(fù)加載
? 2.當(dāng)自己程序中定義了一個(gè)和Java.lang包同名的類,此時(shí),由于使用的是雙親委派機(jī)制,會(huì)由啟動(dòng)類加載器去加載JAVA_HOME/lib中的類,而不是加載用戶自定義的類。此時(shí),程序可以正常編譯,但是自己定義的類無(wú)法被加載運(yùn)行。
3.保護(hù)程序安全,防止核心API被隨意篡改
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)名稱:JVM類加載機(jī)制-創(chuàng)新互聯(lián)
地址分享:http://aaarwkj.com/article16/coegdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、軟件開(kāi)發(fā)、做網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、商城網(wǎng)站、App開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容