JVM Class載入過程詳解

2021-10-24 06:24:47 字數 2268 閱讀 3584

jvm會通重載入、連線、初始化3個步驟來對該類進行初始化

類載入器可以分為4種:啟動類載入器,拓展類載入器,應用類載入器,自定義類載入器

做個簡單demo測試:

system.out.

println

(string.

class

.getclassloader()

);system.out.

println

(sun.net.spi.nameservice.dns.dnsnameservice.

class

.getclassloader()

);//ext包下面的類

system.out.

println

(classloadertest1.

class

.getclassloader()

);//本地測試類

null

sun.misc.launcher$extclassloader@60e53b93

第乙個結果輸出為什麼是null?

jvm載入採用雙親委派機制,主要出於安全考慮。loading的過程可以理解為:

注:父載入器不是"類載入器的載入器",也不是"類載入器的父類載入器"!!!

system.out.

println

(classloadertest2.

class

.getclassloader()

);

system.out.

println

(classloadertest2.

class

.getclassloader()

.getclass()

.getclassloader()

);

system.out.

println

(classloadertest2.

class

.getclassloader()

.getparent()

.getclass()

.getclassloader()

); system.out.

println

(classloadertest2.

class

.getclassloader()

.getparent()

);

null

null

sun.misc.launcher$extclassloader@6e0be858

自定義類載入器

為什麼要用自定義類載入器?

怎樣寫乙個自定義類載入器?原始碼比較簡單,這裡不再羅列

具體實現如下:

public

class

hellojvm

}

public

class

customclassloader

extends

classloader

private

byte

loadclassdata()

data = baos.

tobytearray()

;}catch

(exception e)

finally

catch

(exception e)

}return data;

}public

static

void

main

(string[

] args)

throws exception

}

執行結果:

頁面載入過程詳解和優化策略

通過html5 performanc相關的api,我們可以對頁面進行效能分析。下面會就幾個比較重要的過程進行分析,給出耗時計算方法,並針對性的給出一些優化建議。下文中的timing均表示performance.timing let timing window.performance.timing 網...

spring bean載入過程

spring通過資源載入器載入相應的xml檔案,使用讀取器讀取資源載入器中的檔案到讀取器中,在讀取過程中,解析相應的xml檔案元素,轉化為spring定義的資料結beandefinition,把相應的beandefinition註冊到登錄檔中。登錄檔中包含的beandefinition的資料結構,沒...

hw module t 載入過程

每乙個hal 模組都有乙個 id值,以這些 id值為引數來呼叫硬體抽象層提供的函式 hw get module 就可以將 指定的模組載入到記憶體來,並且獲得 乙個hw module t 介面來開啟相應的裝置。函式hw get module 實現在hardware libhardware hardwa...