Java Classloader 類載入篇 2

2021-08-25 04:48:33 字數 1051 閱讀 9926

[b]1. contextclassloader 執行緒上下文類載入器[/b]

執行緒上下文 classloader 由執行緒建立者提供,供執行於該執行緒的**載入類和資源時使用。如果未設定,則預設為父執行緒的 classloader。

thread.currentthread().getcontextclassloader();

thread.currentthread().setcontextclassloader(classloader);

原始執行緒的上下文 classloader 通常設定為用於載入應用程式的類載入器,下面的**片段是截至 sun.misc.launcher 類,此類由「啟動類載入器」載入

[b]2. static 靜態塊的初始化[/b]

static 靜態塊只有在使用 new 或 class.forname(classname) 時才會被初始化,並且只執行1次

class.forname() 方法內部是通過 jni 呼叫本地**實現的 class.forname0(classname, true, classloader.getcallerclassloader())

/*** @param name 類名

* @param initialize 是否必須初始化類,如果為false初始化將在第1次例項化類時執行,只執行1次

* @param loader 用於載入類的類載入器

* @return

* @throws classnotfoundexception

*/private static native class forname0(string name, boolean initialize, classloader loader) throws classnotfoundexception;

new 與 class.forname(classname) 的區別在於,使用 new 必須顯示的 import 類,否則就無法編譯通過。而class.forname是在執行時查詢與載入。

jvm 類載入器及雙親委派模板篇

每乙個類都有乙個對應它的類載入器。系統中的 classloder 在協同工作的時候會預設使用 雙親委派模型 即在類載入的時候,系統會首先判斷當前類是否被載入過。已經被載入的類會直接返回,否則才會嘗試載入。載入的時候,首先會把該請求委派該父類載入器的 loadclass 處理,因此所有的請求最終都應該...

JVM 類載入機制 類載入器

類宣告週期 檔案格式驗證 基於二進位製流,只有這一步是基於二進位製流,後續步驟都是基於方法區資料 1.魔數 cafe babe 開頭 2.主次版本是否在當前jvm支援範圍 3.常量池的常量是否不被支援 4.很多很多規範 元資料驗證 1.類是否有父類,object 2.匪類是否繼承了被final修飾的...

JVM類載入機制 類載入器

一 概念 通過乙個類的全限定名來獲取描述此類的二進位制位元組流 實現這個動作的 模組成為 類載入器。4 雙親委派模型 1 定義 除了頂層的啟動類載入器外,其餘的類載入器都應當有自己的父類載入器,且載入器之間的父子關係一般不會繼承,而是使用組合關係來復用父載入器的 2 工作過程 如果乙個類載入器收到了...