1. 程式人生 > >Class字節碼的加載

Class字節碼的加載

簡單 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字節碼的加載