溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java類加載過程是什么

發布時間:2020-10-28 15:00:44 來源:億速云 閱讀:214 作者:小新 欄目:編程語言

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

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

  1. 編譯:Javac 把Java文件編譯成.class文件
  2. 運行:把.class文件交給JVM運行

類的加載過程

JVM虛擬機把.class文件中類信息加載進內存,并進行解析生成對應的class對象的過程。JVM不是一開始就把所有的類都加載進內存中,而是只有第一次遇到某個需要運行的類時才會加載,且只加載一次。

Java類加載過程是什么

加載

把class字節碼文件從各個來源通過類加載器裝載入內存中
JVM要完成三件事

  1. 通過一個類的全限定名來獲取定義此類的二進制字節流。
  2. 靜態存儲結構- > 方法區的運行時數據結構
  3. 在Java堆中生成對應類的java.lang.Class對象,作為方法區訪問這些數據的訪問入口。

類加載器

  • 啟動類加載器
  • 擴展類加載器
  • 應用類加載器
  • 自定義類加載器

連接

將java類的二進制代碼合并到JVM的運行狀態之中的過程

驗證

保證加載進來的字節流符合虛擬機規范,不會造成安全錯誤

驗證分類

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

準備

為類變量(注意,不是實例變量)分配內存,并且賦予初值(Java虛擬機根據不同變量類型的默認初始值)

默認初始值

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

解析

常量池內的符號引用替換為直接引用的過程

符號引用:一個字符串,但是這個字符串給出了一些能夠唯一性識別一個方法,一個變量,一個類的相關信息

直接引用:可以理解為一個內存地址,或者一個偏移量

舉個例子來說,現在調用方法hello(),這個方法的地址是1234567,那么hello就是符號引用,1234567就是直接引用

解析階段,虛擬機會把所有的類名,方法名,字段名這些符號引用替換為具體的內存地址或偏移量,也就是直接引用

初始化

對類變量(static修飾的變量或語句)初始化,是執行類構造器的過程

初始化過程

  • 初始化一個類的時候,其父類尚未初始化,則優先初始化其父類
    - 同時包含多個靜態變量和靜態代碼塊,則按照自上而下的順序依次執行

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女