大戰Java虛擬機器 3 類載入機制

2021-09-07 19:20:20 字數 911 閱讀 7671

當你的**編譯成class檔案之後,那麼虛擬機器如何載入這些檔案呢?我們需要知道虛擬機器到底做了什麼樣的事情。

載入--鏈結---初始化----使用---解除安裝

1、載入

讀取二進位制位元組流,將靜態儲存結構轉化為方法區執行時的資料結構,在記憶體中生詞乙個代表這個類的物件。

2、驗證

驗證格式,元資料,位元組碼,符合引用,總之就是避免一些惡意**。

3、準備

為類分配記憶體並設定變數初始值static的,注意這裡只是初始值,而不是賦值,賦值是在初始化做的

4、解析

將常量池中的符合替換成直接引用。

5、初始化

在5個情況下會進行初始化,牢記!

new反射呼叫

子類初始化需要先初始化父類

main主類

jdk1.7動態語言支援

1、類與類載入器確定了乙個類在虛擬機器中的唯一性。

類載入器不同,那麼兩個物件一定不同。

2、有兩種類載入器

一種是啟動類載入器,使用c++實現,是虛擬機器一部分。

還有一種就是繼承自classloader的類載入器

3、雙親委派模型

除了頂層啟動類載入器之外,其餘的載入器都應該有自己的父類載入器,一般使用組合實現而不是繼承。

乙個類載入器收到類載入的請求首先會委派給父類去完成,只有當父類無法完成載入時才會自己去載入。

好處:所有類都繼承自object,object都是由啟動類來載入的,就是乙個object了,不然自己載入自己的就亂套了。

類從class檔案被載入進虛擬機器經過了驗證等很多的步驟。

其中我們需要重點了解的是類是什麼時候被載入的,什麼時候被初始化的,初始化的順序,因為這對於我們寫程式來說是有直接關係的。

還需要知道類載入器並只是單純的像名字所說的一樣,載入乙個類就完事了,它有自己重要的作用。

Java虛擬機器載入類的順序

虛擬機器載入類的先後順序和特性 虛擬機器載入類的時候,1.先載入該類的靜態常量和變數 靜態常量和變數按順序載入 2.然後載入靜態 塊,3.最後再載入其它部分。而且,靜態常量和靜態 塊只在載入類的時候執行一次,new 新的物件的時候不再執行.public class statictest public...

虛擬機器類載入機制(三)類驗證的過程

這導致class的 五花八門,而且存在安全隱患,試想一下,如果有人製作惡意class檔案 jvm虛擬機器照單全收,輕則導致電腦宕機,重則直接造成財產損失,這顯然是不被允許的 所以jvm自身的第一道防火牆,驗證工作就開始了,一共四個步驟,檔案格式驗證,元資料驗證,位元組碼驗證,符號引用驗證 檔案格式很...

java類載入機制

載入類時,每個類載入器總是首先將家在任務交給父類載入器,若父類載入器載入不到,自己才去載入 bootstrap loader時最頂級的載入器,其父載入器為null test test new test 11j class testclass test.getclass classloader cla...