溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java類加載過程是什么

發(fā)布時(shí)間:2020-10-28 15:00:44 來源:億速云 閱讀:165 作者:小新 欄目:編程語言

這篇文章主要介紹了Java類加載過程是什么,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

Java文件從編碼到完成最終執(zhí)行的過程:

  1. 編譯:Javac 把Java文件編譯成.class文件
  2. 運(yùn)行:把.class文件交給JVM運(yùn)行

類的加載過程

JVM虛擬機(jī)把.class文件中類信息加載進(jìn)內(nèi)存,并進(jìn)行解析生成對(duì)應(yīng)的class對(duì)象的過程。JVM不是一開始就把所有的類都加載進(jìn)內(nèi)存中,而是只有第一次遇到某個(gè)需要運(yùn)行的類時(shí)才會(huì)加載,且只加載一次。

Java類加載過程是什么

加載

把class字節(jié)碼文件從各個(gè)來源通過類加載器裝載入內(nèi)存中
JVM要完成三件事

  1. 通過一個(gè)類的全限定名來獲取定義此類的二進(jìn)制字節(jié)流。
  2. 靜態(tài)存儲(chǔ)結(jié)構(gòu)- > 方法區(qū)的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)
  3. 在Java堆中生成對(duì)應(yīng)類的java.lang.Class對(duì)象,作為方法區(qū)訪問這些數(shù)據(jù)的訪問入口。

類加載器

  • 啟動(dòng)類加載器
  • 擴(kuò)展類加載器
  • 應(yīng)用類加載器
  • 自定義類加載器

連接

將java類的二進(jìn)制代碼合并到JVM的運(yùn)行狀態(tài)之中的過程

驗(yàn)證

保證加載進(jìn)來的字節(jié)流符合虛擬機(jī)規(guī)范,不會(huì)造成安全錯(cuò)誤

驗(yàn)證分類

  • 文件格式的驗(yàn)證,比如常量中是否有不被支持的常量?文件中是否有不規(guī)范的或者附加的其他信息
  • 元數(shù)據(jù)的驗(yàn)證,比如該類是否繼承了被final修飾的類?類中的字段,方法是否與父類沖突?是否出現(xiàn)了不合理的重載?
  • 字節(jié)碼的驗(yàn)證,保證程序語義的合理性,比如要保證類型轉(zhuǎn)換的合理性。
  • 符號(hào)引用的驗(yàn)證,比如校驗(yàn)符號(hào)引用中通過全限定名是否能夠找到對(duì)應(yīng)的類?校驗(yàn)符號(hào)引用中的訪問性(private,public等)是否可被當(dāng)前類訪問?

準(zhǔn)備

為類變量(注意,不是實(shí)例變量)分配內(nèi)存,并且賦予初值(Java虛擬機(jī)根據(jù)不同變量類型的默認(rèn)初始值)

默認(rèn)初始值

  • 8種基本類型的初值,默認(rèn)為0
  • 引用類型的初值則為null
  • 常量的初值即為代碼中設(shè)置的值
  • final static tmp = 456

解析

常量池內(nèi)的符號(hào)引用替換為直接引用的過程

符號(hào)引用:一個(gè)字符串,但是這個(gè)字符串給出了一些能夠唯一性識(shí)別一個(gè)方法,一個(gè)變量,一個(gè)類的相關(guān)信息

直接引用:可以理解為一個(gè)內(nèi)存地址,或者一個(gè)偏移量

舉個(gè)例子來說,現(xiàn)在調(diào)用方法hello(),這個(gè)方法的地址是1234567,那么hello就是符號(hào)引用,1234567就是直接引用

解析階段,虛擬機(jī)會(huì)把所有的類名,方法名,字段名這些符號(hào)引用替換為具體的內(nèi)存地址或偏移量,也就是直接引用

初始化

對(duì)類變量(static修飾的變量或語句)初始化,是執(zhí)行類構(gòu)造器的過程

初始化過程

  • 初始化一個(gè)類的時(shí)候,其父類尚未初始化,則優(yōu)先初始化其父類
    - 同時(shí)包含多個(gè)靜態(tài)變量和靜態(tài)代碼塊,則按照自上而下的順序依次執(zhí)行

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Java類加載過程是什么內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,遇到問題就找億速云,詳細(xì)的解決方法等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI