1.類別載入機制
分為 載入、驗證 、準備 、解析 、初始化、 使用 、卸載。
(1)加載
在硬碟上尋找並透過IO讀入字節碼文件,使用到類別時才會加載,例如呼叫類別的main()方法, new對像等等,在載入階段會在記憶體中產生一個代表這個類別的java.lang.Class對象,作為方法區這個類別的各種資料的存取入口。
(2)驗證
校驗字節碼檔案的正確性 。
(3)準備
給類別的靜態變數分配內存,並賦予預設值 。
(4)解析
將符號引用替換為直接引用,該階段會把一些靜態方法(符號引用,例如main()方法)替換為指向資料所存記憶體的指標或句柄等(直接引用),這是所謂的靜態連結過程(類別載入期間完成),動態連結是在程式運行期間完成的將符號引用替換為直接引用,下節課會講到動態連結。
(5)初始化
2.雙親委派機制
對類別的靜態變數初始化為指定的值,執行靜態程式碼區塊。
應用程式類別載入器AppClassLoader載入類別的雙親委派機制原始碼,AppClassLoader的loadClass方法最終會呼叫其父類ClassLoader的loadClass方法,該方法的大致邏輯如下:
首先,檢查一下指定名稱的類別是否已經加載過,如果加載過了,就不需要再加載,直接返回。
如果此類沒有載入過,那麼,再判斷一下是否有父載入器;如果有父載入器,則由父載入器載入(即呼叫parent.loadClass(name, false);)。或是呼叫bootstrap類別載入器來載入。
如果父載入器及bootstrap類別載入器都沒有找到指定的類,那麼呼叫目前類別載入器的findClass方法來完成類別載入。
3.全碟負責委託機制
「全碟負責」是指當一個ClassLoder裝載一個類別時,除非顯示的使用另一個ClassLoder,該類別所依賴及引用的類別也由這個ClassLoder載入。
以上是java之JVM各類機制是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!