1. 程式人生 > 實用技巧 >【0302】 學32Java 面試必考點 + 自己補充、整理 類載入機制

【0302】 學32Java 面試必考點 + 自己補充、整理 類載入機制

一、類載入圖解

1、類載入機制

A) 類的載入指將編譯好的 Class 類檔案中的位元組碼讀入記憶體中,將其放在方法區內並建立對應的 Class 物件。

B) 類的載入分為載入、連結、初始化,其中連結又包括驗證、準備、解析三步。

在這裡插入圖片描述

二、類載入過程解釋

1、載入 (檔案=> 記憶體)

通過類的完全限定名查詢此類位元組碼檔案,並利用位元組碼檔案建立一個 Class 物件。

2、驗證 (類檔案驗證)

A) 目的:確保 Class 檔案符合當前虛擬機器要求,不會危害虛擬機器自身安全。

B) 主要包括四種:檔案格式驗證,元資料驗證,位元組碼驗證,符號引用驗證

3、準備 (進行記憶體分配)

A) 為類中由 static 修飾的變數分配記憶體,並且設定初始值(0 或null)。

B) 程式碼中設定的具體值是在初始化階段完成的。

C) 不包含用 final 修飾的靜態變數,因為 final 在編譯的時候就會分配。

4、解析 (解析欄位、介面、方法)

A) 主要是將常量池中的符號引用替換為直接引用的過程。

B) 直接引用就是直接指向目標的指標、相對偏移量等。

5、初始化 (完成靜態塊執行與靜態變數的賦值)

A) 若被載入類的父類沒有初始化,則先對父類進行初始化。

B) 只有對類主動使用時,才會進行初始化,初始化的觸發條件包括在建立類的例項時、訪問類的靜態方法或者靜態變數時、Class.forName() 反射類時、或者某個子類被初始化時。

6、注意

A) 生命週期,就是從類的載入到類例項的建立與使用,再到類物件不再被使用時可以被 GC 解除安裝回收。

B) 由 Java 虛擬機器自帶的三種類載入器載入的類在虛擬機器的整個生命週期中是不會被解除安裝的,只有使用者自定義的類載入器所載入的類才可以被解除安裝。

三、類載入器

1、圖解
在這裡插入圖片描述

2、說明

A) ,Java 自帶的三種類載入器分別是:BootStrap 啟動類載入器、擴充套件類載入器和應用載入器(也叫系統載入器)。

B) 啟動類載入器載入 java home 中 lib 目錄下的類,擴充套件載入器負責載入 ext 目錄下的類,應用載入器載入 classpath 指定目錄下的類。除此之外,可以自定義類載入器。

C) Java 的類載入使用雙親委派模式,一個類載入器在載入類時,先把這個請求委託給自己的父類載入器去執行,如果父類載入器還存在父類載入器,就繼續向上委託,直到頂層的啟動類載入器,如果父類載入器能夠完成類載入,就成功返回,如果父類載入器無法完成載入,那麼子載入器才會嘗試自己去載入。

D) 雙親委派模式的好處,可以避免類的重複載入,另外也避免了 Java 的核心 API 被篡改。

其他文章
https://www.jianshu.com/p/3556a6cca7e5
https://www.jianshu.com/p/202f6abb229c
https://www.cnblogs.com/zhengbin/p/5631363.html
https://www.cnblogs.com/xiaoxian1369/p/5498817.html
https://www.jianshu.com/p/dd39654231e0