java 類載入機制

2021-09-01 06:27:05 字數 1039 閱讀 6736

虛擬機器將class檔案的資訊載入到記憶體,並對資料進行校驗,轉換解析和初始化,這就是類載入機制。

類從被載入到記憶體,到解除安裝出記憶體,需要經過幾個階段:

載入(通過類名獲取該類的位元組流),

驗證(驗證class位元組流),

準備(進行類變數記憶體分配,即static變數,如private static int a = 123,這個變數在準備階段的值為0,只有初始化以後,a = 123,

而private static final int b = 123 ,靜態常量在準備階段 就會為b  賦值123)

解析初始化

使用解除安裝

類的初始化被呼叫時機:

1 通過new 關鍵字初始化例項

2 呼叫類中的靜態變數,靜態方法

3 通過反射呼叫某個類

4 通過new關鍵字例項化時,如果有父類,則先初始化父類,再初始化子類

(通過子類呼叫父類中的靜態變數和方法,只會初始化父類,不會初始化子類)

5 虛擬機器啟動時,需要制定主類(包含main方法的類),如android中的activitythread

類載入機制: 雙親委派機制(因為雙親委派機制的存在,保證了系統的穩定,頂層classloader載入一些基礎類,如object類就是由頂層classloader載入,這樣避免了乙個類被多個classloader載入)

載入過程:

1) 檢測該類是否已被載入

// first, check if the class has already been loaded

class<?> c = findloadedclass(name);

2)嘗試載入,先有父類載入

if (c == null) else

} catch (classnotfoundexception e)

3) 父類載入失敗,有當前classloader載入

if (c == null)

}return c;

android中的pathclassloader和dexclassloader也遵循雙親委派機制

java類載入機制

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

Java類載入機制

解析階段是虛擬機器將常量池內的符號引用替換為直接引用的過程。符號引用 symbolic reference 符號引用以一組符號來描述所引用的目標,符號引用可以是任何形式的字面量,符號引用與虛擬機器實現的記憶體布局無關,引用的目標並不一定已經在記憶體中。直接引用 direct reference 直接...

Java類載入機制

在虛擬機器的生命週期中乙個類只被載入一次。類載入的原則 延遲載入,能少載入就少載入,因為虛擬機器的空間是有限的。類載入的時機 1 第一次建立物件要載入類.2 呼叫靜態方法時要載入類,訪問靜態屬性時會載入類。3 載入子類時必定會先載入父類。4 建立物件引用不載入類.5 子類呼叫父類的靜態方法時 1 當...