JVM(二)

JVM類加載機制
加載:在內存中生成一個代表這個類的class對象,作爲方法區這個類的各種數據的入口.
驗證:保證class文件的字節流中包含的信息是否符合當前虛擬機的要求.
準備:在方法區中分配這些變量所使用的內存空間.
解析:虛擬機將常量池中的符號引用替換爲直接引用的過程.
初始化:執行類構造器<client>方法的過程.
使用
卸載

以下情況不會執行類初始化:
1.通過子類引用父類的靜態字段,只會出發父類的初始化,而不會出發子類的初始化.
2.定義對象數組,不會出發該類的初始化.
3.常量在編譯器見會存入調用類的常量池中,本質上並沒有直接引用定義常量的類.不會觸發定義常量所在的類.
4.通過類名獲取class對象,不會觸發類的初始化.
5.通過class.forname加載指定類時,如果指定參數initialize爲false時,也不會觸發類初始化,其實這個參數是告訴虛擬機,是否要對類進      行初始化.
6.通過classloader默認的loadclass方法,也不會觸發初始化動作.

雙親委派機制
  當一個類收到類加載請求,它首先不會嘗試自己區加載這個類,而是把這個請求委派給父類去完成,每一個層次的類加載起都是如此,
因此所有的加載請求都應該傳送到啓動類加載器中,只有當父類加載器反饋自己無法完成這個請求的時候(在它的加載路徑下沒有找到所需加載的class),子類加載器纔會嘗試自己去加載.
  雙親委派機制好處:不管是那個類加載器加載這個類,最終都是委託給頂層的啓動類加載器進行加載,保證類不用不同的類加載最終                                     得到的都是同樣一個object對象.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章