Class字節碼的加載
阿新 • • 發佈:2017-12-24
簡單 gpo 文件 jar文件 目錄 存在 class c++實現 繼承
提到Class的加載,就不得不提到ClassLoader,因為java加載類就是靠它加載的,它負責讀取字節碼的字節流進行加載。
ClassLoader的繼承關系是從BootStrapClassLoader開始的,也是由它最先加載類,然後是ExtClassLoader,接下來是AppClassLoder(應用程序默認的),
最後是用戶自己的ClassLoader(通常在容器下編寫代碼,都是由容器自定義創建的ClassLoader創建的類)。下面簡單介紹一下他們的用途。
1、BootStrapClassLoader
BootStrapClassLoder主要用於加載一些java自帶的核心類(例如java.lang.*),通常這些核心類的Class被簽名,不能被替換掉,它是由JVM內核實現的,
在Hotspot VM中用C++實現的,有了它加載最核心的內容,才會有後面的ClassLoader的存在。
2、ExtClassLoader
ExtClassLoader是加載在jre/lib/ext/目錄下的jar包,用戶也可以自己將jar包放到這個目錄下,通過這個ClassLoader來加載。
3、AppClassLoader
AppClassLoader也是用戶可見的ClassLoader,它加載的是classpath下面的內容,也就是和classpath相關的類,在默認情況下都由它來加載。
4、自定義的ClassLoader
用戶自定義的ClassLoader要加載的內容可能不在系統的classpath範圍內(也可以在這個範圍內),甚至不是Class文件或jar文件,
也就是加載方式可以完全由自己來定義。
Class字節碼的加載