成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Java中如何實現類加載機制

這期內容當中小編將會給大家?guī)碛嘘PJava中如何實現類加載機制,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)公司是一家專注于網站設計、成都網站制作與策劃設計,朗縣網站建設哪家好?成都創(chuàng)新互聯(lián)公司做網站,專注于網站建設十年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:朗縣等地區(qū)。朗縣做網站價格咨詢:13518219792

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

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中如何實現類加載機制了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網站名稱:Java中如何實現類加載機制
分享網址:http://jinyejixie.com/article20/possjo.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網頁設計公司、微信公眾號、虛擬主機、、定制網站、Google

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都做網站
镶黄旗| 韩城市| 长顺县| 新竹市| 绿春县| 汉沽区| 汤阴县| 洛阳市| 阳朔县| 太和县| 新邵县| 岳西县| 若羌县| 安仁县| 东阳市| 墨脱县| 卫辉市| 玉门市| 郑州市| 格尔木市| 东乌珠穆沁旗| 嘉黎县| 徐汇区| 瓮安县| 双鸭山市| 绿春县| 农安县| 凤阳县| 江永县| 彭阳县| 桃园市| 安吉县| 福州市| 辽阳县| 山东省| 阜阳市| 南陵县| 微山县| 弋阳县| 磐石市| 天水市|