準(zhǔn)備階段正式為類變量分配內(nèi)存并設(shè)置初始值的階段這些變量所使用的內(nèi)存都在方法區(qū)進(jìn)行分配。

目前
成都創(chuàng)新互聯(lián)已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、
網(wǎng)站運(yùn)營、企業(yè)網(wǎng)站設(shè)計(jì)、
呼倫貝爾網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
解析
解析階段是JVM將常量池內(nèi)的符號引用替換為直接引用的過程前面我們談到的編譯填充符號表的價(jià)值在這地方體現(xiàn)出來了。解析過程無非就是對類或接口、字段、接口方法進(jìn)行解析。
初始化
類初始化階段是類加載過程的最后一步在準(zhǔn)備階段變量已經(jīng)賦過一次初始值,而在這一步則會根據(jù)程序猿定制的要求進(jìn)行初始化類變量和其他資源。
在這個(gè)階段就是執(zhí)行前面編譯字節(jié)碼生成流程提到的方法的過程。虛擬機(jī)也保證在多線程環(huán)境下這個(gè)方法被同時(shí)調(diào)用時(shí)被正確的加鎖、同步保證只有一個(gè)線程去執(zhí)行這個(gè)方法而其他線程阻塞等待。
這個(gè)位置還涉及到另一個(gè)我們比較關(guān)心的知識點(diǎn)Java何時(shí)觸發(fā)對類的初始化操作呢?
在遇到new、getstatic、putstatic或invokestatic這4條字節(jié)碼指令時(shí)如果類沒有初始化、則需要觸發(fā)其初始化。簡單理解就是new一個(gè)對象的時(shí)候讀取或者設(shè)置一個(gè)類的靜態(tài)字段的時(shí)候調(diào)用一個(gè)類的靜態(tài)方法的時(shí)候。使用java.lang.reflect包的方法對類進(jìn)行反射調(diào)用的時(shí)候如果類沒有初始化則需要觸發(fā)其初始化。當(dāng)初始化一個(gè)類發(fā)現(xiàn)其父類還沒進(jìn)行初始化則先觸發(fā)其父類的初始化操作。當(dāng)虛擬機(jī)啟動時(shí)用戶需要指定一個(gè)要執(zhí)行的主類虛擬會先初始化這個(gè)主類。當(dāng)使用JDK1.7以上的動態(tài)語言支持時(shí)如果一個(gè)java.lang.invoke.MethodHandle實(shí)例最后的解析結(jié)果為REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,并且這個(gè)方法句柄所對應(yīng)類沒有進(jìn)行初始化則觸發(fā)初始化操作。
網(wǎng)頁題目:Java虛擬機(jī)--一段Java程序的生命史(五)
當(dāng)前地址:http://m.rwnh.cn/article30/cgcopo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站建設(shè)、云服務(wù)器、做網(wǎng)站、小程序開發(fā)、網(wǎng)站營銷
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源:
創(chuàng)新互聯(lián)