[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 工作過程 如果乙個類載入器收到了...