四 Java面試之JVM復習

JVM類加載機制分為五個部分:加載 , 驗證 , 準備 , 解析 , 初始化

四 Java面試之JVM復習


方式/
加載:這個階段會在內存中生當作一個代表這個類的java.lang.Class對象 , 作為方式區這個類的各類數據進口 。 要注重的是這里紛歧定非要從一個Class文件獲取 , 這里既可以從ZIP包中讀?。ê帽萰ar包和war包中讀?。?nbsp;, 也可以在運行時計較生當作(動態代辦署理) , 也可以由其它文件生當作(好比將JSP文件轉換當作對應的Class類) 。


驗證:這一階段本家兒如果為了確保Class文件的字節省中包含的信息是否合適當前虛擬機的要求 , 而且不會風險虛擬機自身的平安 。


籌辦:正式為類變量分派內存并設置類變量的初始值階段 , 即在方式區平分配這些變量所利用的內存空間 。 注重這里按圖必然義 , 現實上變量v在籌辦階段事后的初始值為0而不是8080 , 將V賦值為8080的put static 指令是程序被編譯后 , 存放于類機關器<client>方式之中 。 可是若是按圖二聲明 , 在編譯階段會為v生當作ConstantValue屬性 , 在籌辦階段虛擬機遇按照ConstantValue屬性將v賦值為80800
四 Java面試之JVM復習



四 Java面試之JVM復習



解析:虛擬機將常量池中的符號引用替代為直接引用的過程 。 符號引用就是
class文件中的:
【四 Java面試之JVM復習】1.CONSTANT_Class_info   
2.CONSTANT_Field_info
3.CONSTANT_Method_info
等類型的常量 。
四 Java面試之JVM復習



初始化階段是類加載最后一個階段 , 前面的類加載階段之后 , 除了在加載階段可以自界說類加載器以外 , 其它操作都由JVM本家兒導 。 到了初始階段 , 才起頭真正執行類中界說的java程序代碼 。
四 Java面試之JVM復習



類加載器: 虛擬機設計團隊把加載動作放到JVM外部實現 , 以便讓應用程序決議若何獲取所需的類 , JVM供給了3種類加載器:
     1.啟動類加載器:負責加載JAVA_HOME\lib目次中的 , 或經由過程-Xbootclasspath參數指定路徑中的 , 且被虛擬機承認(按文件名識別 , 如rt.jar)的類 。


     2.擴展類加載器:負責加載JAVA_HOME\lib\ext目次中的 , 或經由過程java.ext.dirs系統變量指定路徑中的類庫 。


     3.應用程序類加載器:負責加載用戶路徑(classpath)上的類庫 。 JVM經由過程雙親委派模子進行類的加載 , 當然我們也可以經由過程擔當java.lang.ClassLoader實現自界說的類加載器 。
四 Java面試之JVM復習



雙親委派:當一個類收到類加載請求 , 他起首不會測驗考試本身加載這個類 , 而是把這個請求委派給父類區完當作 , 每一個條理類加載器都是如斯 , 是以所有的加載請求都應該傳動到啟動類加載器中 , 只有當父類加載器反饋本身無法完當作這個請求的時辰(在它的加載路徑下沒有找到所需加載的Class) , 子類加載器才會測驗考試本身去加載 。

猜你喜歡