1. JVM整體結構
本博文,是參考尚硅谷周陽老師來整理和總結的。
2.類加載器
2.1 什麼是類加載器
一個java.class文件,會經過類加載器加載到JVM裏,JVM裏創建這個文件的CLASS類,然後再在JVM裏實例化不同的對象。
通過對象,可以找到對應的類CLASS,通過CLASS可以找到這個類是由哪個加載器加載進來的
2.2 類加載器有幾種
類加載器分爲虛擬機自帶
的和自定義
,虛擬機自帶有BootStrapClassLoader(C++編寫)
、ExtClassLoader(JAVA編寫)
、AppClassLoader
,這些系統自帶的類加載器,會去不同的地方加載已經編寫好的java類
1.BootstrapClassLoader 啓動類加載器
用C++編寫的 是最頂層的類裝載器,用來加載jre/lib/rt.jar下的類
2.ExtensionClassLoader拓展類加載器
用來加載jre/lib/ext/*.jar的所有類
3.AppClassLoader 應用類加載器
應用類加載器,也叫系統類加載器,用來加載當前應用classpath下的所有類
4.User-Definend 用戶自定義的類加載器
繼承 java.lang.ClassLoader類實現裏面的方法,自定義加載類的方法
2.3 雙親委派機制
正如上面我們自定義了一個String類,當執行這個類的時候,首先是父加載器先去找這個類,當父加載器找到這個類後,就實例化這個類,然後調用main方法執行,但是JDK的String這個類是沒有main方法的,所以就會報錯,而不是加載我們自己定義的類。
2.4 沙箱安全機制
沙箱安全機制是由基於雙親委派機制
上 採取的一種JVM的自我保護機制
,假設你要寫一個java.lang.String 的類,由於雙親委派機制的原理,此請求會先交給Bootstrap試圖進行加載,但是Bootstrap在加載類時首先通過包和類名查找rt.jar中有沒有該類,有則優先加載rt.jar包中的類,因此就保證了java的運行機制不會被破壞
.
3.執行引擎
就是負責解釋命令,提交操作系統執行。