jvm如何載入一個類
第一步:載入,雙親委派:啟動類載入器(jre/lib),系統擴充套件類載入器(ext/lib),應用類載入器(classpath),前者為c++編寫,所以系統載入器的parent為空,後面兩個類載入器都是透過啟動類載入器載入完成後才能使用。載入的過程就是查詢位元組流,可以透過網路,也可以自己在程式碼生成,也可以來源一個jar包。另外,同一個類,被不同的類載入器載入,那麼他們將不是同一個類,java中透過類載入器和類的名稱來界定唯一,所以我們可以在一個應用成存在多個同名的類的不同實現。
第二步:連結:(驗證,準備,解析) 驗證主要是校驗位元組碼是否符合約束條件,一般在位元組碼注入的時候關注的比較多。準備:給靜態欄位分配記憶體,但是不會初始化,解析主要是為了將符號引用轉換為實際引用,可能會觸發方法中引用的類的載入。
第三步:初始化,如果賦值的靜態變數是基礎型別或者字串並且是final的話,該欄位將被標記為常量池欄位,另外靜態變數的賦值和靜態程式碼塊,將被放在一個叫cinit的方法內被執行,為了保證cinit方法只會被執行一次,這個方法會加鎖,我們一般實現單例模式的時候為保證執行緒安全,會利用類的初始化上的鎖。 初始化只有在特定條件下才會被觸發,例如new 一個物件,反射被呼叫,靜態方法被呼叫等。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31560357/viewspace-2644417/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jvm類載入JVM
- 【JVM】JVM之類載入器JVM
- JVM是如何進行載入類的?JVM
- JVM-類載入JVM
- JVM 之類載入JVM
- 類載入器(JVM)JVM
- JVM入門--類載入器JVM
- JVM:類載入機制JVM
- JVM類載入機制JVM
- Java jvm 類載入 反射JavaJVM反射
- JVM類載入過程JVM
- JVM 類載入機制JVM
- 理解JVM(四):JVM類載入機制JVM
- 一夜搞懂 | JVM 類載入機制JVM
- jvm系列(一):java類的載入機制JVMJava
- jvm類載入子系統JVM
- JVM-類載入機制JVM
- 【JVM】JVM系列之類載入機制(四)JVM
- Jvm 重複載入同一個類的結果會怎麼樣?JVM
- JVM系列(四) – JVM類載入機制詳解JVM
- JVM系列(四) - JVM類載入機制詳解JVM
- 【隨筆】JVM核心:JVM執行和類載入JVM
- 【JVM進階之路】十四:類載入器和類載入機制JVM
- 一個Java類的載入Java
- JVM類載入機制小結JVM
- JVM初探(三):類載入機制JVM
- JVM之類載入器ClassLoaderJVM
- JVM-類載入子系統JVM
- JVM(五)——類的載入機制JVM
- JVM類載入器-原始碼分析JVM原始碼
- 深入理解JVM類載入器JVM
- 深入理解JVM之類載入JVM
- 每日一問:講講 JVM 的類載入機制JVM
- JAVA-大白話探索JVM-類載入器(一)JavaJVM
- 一道面試題搞懂JVM類載入機制面試題JVM
- 每天學習一點 JVM 之:類載入機制JVM
- JVM系列之類載入流程-自定義類載入器JVM
- 自定義一個類載入器