JVM面試必備知識點筆記整理(二)

上篇文章,我們說到自己寫的java程式碼檔案是怎麼打包到機器執行的過程。裡面提到了一個核心的元件叫類載入器,今天就來看看一個類從載入到使用的全過程都發生了什麼。

JVM面試必備知識點筆記整理(二)

類從載入到使用的過程

1、載入

JVM透過類載入器把。class位元組碼檔案對應的類載入到記憶體,在載入階段會在記憶體中生成一個代表這個類的java。lang。Class物件,作為方法區這個類的各種資料的訪問入口

2、驗證

驗證載入進來的。calss位元組碼檔案是否符合指定Java虛擬機器規範

3、準備

分配類的記憶體空間

給類的類變數(static修飾的變數)分配記憶體空間,並賦予預設值,比如static修飾的int變數,預設值為0

4、解析

將符號引用替換成直接引用。這句話裡符號引用不好理解,什麼意思呢?

符號引用

:一組符號來描述引用的目標。符號引用可以是任何形式的字面量,只要使用時能無歧義的定位目標即可。

個人理解

:在編譯的時候每個Java類編譯成。class檔案,Java虛擬機器並不知道引用類的地址,就先用符號引用來代替,在解析階段,再替換成準備階段分配的記憶體真正地址

5、初始化

對類的靜態變數初始化為指定的值

執行靜態程式碼塊

舉個例子來加深理解

假如有下面這段程式碼

JVM面試必備知識點筆記整理(二)

當我們執行Main方法啟動程式時,首先就會透過類載入器將主類Math載入到記憶體,看下圖

JVM面試必備知識點筆記整理(二)

類被載入到方法區中主要包含哪些資訊

JVM裡存放類的資訊區域叫方法區(低版本jdk叫永久代)高版本jdk8以後叫metaspce元資料區。那麼類被載入到方法區之後,方法區中主要包含哪些資訊呢?以上面Math為例

執行時常量池

型別資訊

欄位資訊

方法資訊

類載入例項的引用

對應class物件例項的引用

上面載入哪一步有說過,類被載入到記憶體時,會建立一個程式碼這個類的java。lang。Class物件的例項放在堆中,作為開放人員訪問這個方法區類定義入口和切入點。