91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中如何實現類加載機制

發布時間:2021-07-01 15:03:58 來源:億速云 閱讀:150 作者:Leah 欄目:大數據

這期內容當中小編將會給大家帶來有關Java中如何實現類加載機制,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Java的程序要運行需要將編譯好的class文件加載到JVM運行時數據區。

Java中如何實現類加載機制 

在了解類的加載機制之前,我們需要了解一下類的生命周期。Java類從被加載到JVM內存開始,到卸載出內存為止,它的整個生命周期包括了:加載(Loading),驗證(Verification),準備(Preparation),解析(Resolution),初始化(Initialization),使用(Using)和卸載(Unloading)七個階段。

Java中如何實現類加載機制

類加載器

Java類的加載需要用到類加載器。類加載器負責裝入類,搜索網絡,jar,zip,文件夾,二進制數據,內存等指定位置的資源。一個Java程序運行,至少有3個不同的類加載器實例,負責加載不同的類。這三個類加載器分別為,啟動類加載器(Bootstrap ClassLoader),擴展類加載器(Extension ClassLoader),應用程序類加載器(Application ClassLoader)。

Java中如何實現類加載機制

通過JDK提供的API:java.lang.Class.getClassLoader() 可以進行類加載器的查看,該API會返回裝載類的類加載器,如果這個類是由Bootstrap ClassLoader加載的,那個這個方法會返回null。

代碼示例:

public class ClassLoaderView {
 public static void main(String[] args) throws Exception {
   // 加載核心類庫的 BootStrap ClassLoader
   System.out.println(
       "核心類庫加載器:"
           + ClassLoaderView.class
               .getClassLoader()
               .loadClass("java.lang.String")
               .getClassLoader());
   // 加載拓展庫的 Extension ClassLoader
   System.out.println(
       "拓展類庫加載器:"
           + ClassLoaderView.class
               .getClassLoader()
               .loadClass("com.sun.nio.zipfs.ZipCoder")
               .getClassLoader());
   // 加載應用程序的 Application ClassLoader
   System.out.println("應用程序庫加載器:" + ClassLoaderView.class.getClassLoader());
 }
}
//運行結果:
核心類庫加載器:null
拓展類庫加載器:sun.misc.Launcher$ExtClassLoader@7f31245a
應用程序庫加載器:sun.misc.Launcher$AppClassLoader@18b4aac2

JVM如何知道我們的類在何方

class信息可以存在不同的地方,那么JVM是如何知道我們的類存在什么地方的哪?通過查看sun.misc.Launcher.AppClassLoader的源碼我們可以看到,它會讀取java.class.path這個配置來獲取那些地址加載類資源。參考以下代碼示例,利用jsp和jcmd兩個命令可以進行驗證。

代碼示例:

public class HelloWord {
 public static void main(String[] args) throws IOException {
   System.out.println("Hello Word");
   System.in.read();
 }
}

jsp命令可以查看本機Java進程,jcmd命令可以查看運行時配置:jcmd 進程號 VM.system_properties

Java中如何實現類加載機制

雙親委派模型

Java中的類并不會重復加載,同一類加載器,同一類名,代表的是同一個類。而避免類重復加載的主要原因在于JVM在加載類時默認采用的是雙親委派模型。所謂的雙親委派模型,就是某個特定的類加載器在接到類的加載請求時,首先將加載任務委托給父加載器,依次遞歸,如果父加載器可以完成類加載任務,就成功返回;只有父加載器無法完成此加載任務時,才自己去加載。由下到上逐級委托,由上到下逐級查找,雙親委派模型保證了Java核心庫的類型安全

Java中如何實現類加載機制

類的卸載

JVM中的類不可能一直存在,在滿足一定條件的情況下類會被卸載掉。在滿足該Class的所有實例都已被垃圾回收,同時加載該類的ClassLoader實例也已經被垃圾回收,那么這個類會被JVM卸載掉。在JVM啟動中增加-verbose:class參數,可以輸出類加載和卸載的日志信息。

上述就是小編為大家分享的Java中如何實現類加載機制了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灌云县| 武邑县| 贞丰县| 湘乡市| 达尔| 南投县| 黄大仙区| 泽普县| 宜州市| 获嘉县| 通许县| 大城县| 玛曲县| 怀集县| 都昌县| 石河子市| 临湘市| 马山县| 渭源县| 东源县| 庆城县| 安平县| 肥城市| 辰溪县| 苍梧县| 噶尔县| 神木县| 瓮安县| 陆良县| 虎林市| 鄂托克旗| 门源| 山西省| 安塞县| 雅安市| 桓仁| 五华县| 北海市| 万山特区| 思南县| 五大连池市|