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...