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

溫馨提示×

溫馨提示×

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

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

Java類加載過程與類加載器是什么

發布時間:2022-08-01 11:19:15 來源:億速云 閱讀:107 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Java類加載過程與類加載器是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java類加載過程與類加載器是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

1. 類加載過程

Java類加載過程與類加載器是什么

加載

通過類的全限定名(包名 + 類名),獲取到類的.class文件,加載到元空間。

鏈接

  • 驗證:檢驗.class文件的安全性

  • 準備:為靜態類型變量分配內存并設置默認值

  • 解析:將常量池內的符號引用轉換為直接引用,符號引用指向一個未被加載的類,或者未被加載類的字段或方法,那么解析將觸發這個類的加載

初始化

執行類的構造器方法init()的過程,若該類具有父類,jvm會保證父類的init先執行,然后在執行子類的init

2. 類加載器

Java類加載過程與類加載器是什么

啟動類加載器

啟動類加載器是由C/C++語言實現的,用來加載Java核心類庫。啟動類只加載包名為:java、javax、sun開頭的類

擴展類加載器

父類加載器為啟動類加載器加載以下兩個目錄中的類庫:

  • java.ext.dirs目錄

  • JDK安裝目錄:jre/lib/ext目錄

我們就可以將我們自己的包放在以上目錄下,就會自動加載進來了。

應用類加載器

父類加載器為啟動類加載器,負責加載環境變量classpath或者系統屬性java.class.path指定路徑下的類庫,是程序中默認的類加載器,我們Java程序中的類,都是由它加載完成的。

自定義類加載器

繼承java.lang.ClassLoader類,重寫findClass()方法 。如果沒有太復雜的需求,可以直接繼承URLClassLoader類,重寫loadClass方法。

作用

  • 加密:Java代碼可以輕易的被反編譯,如果你需要把自己的代碼進行加密以防止反編譯,可以先將編譯后的代碼用某種加密算法加密,類加密后就不能再用Java的ClassLoader去加載類了,這時就需要自定義ClassLoader在加載類的時候先解密類,然后再加載。

  • 從非標準的來源加載代碼:如果你的字節碼是放在數據庫、甚至是在云端,就可以自定義類加載器,從指定的來源加載類。

雙親委派模型

jvm對class文件采用的是按需加載的方式,當需要使用該類時,jvm才會將它的class文件加載到內存中產生class對象。在加載類的時候,是采用的雙親委派機制

  • 如果一個類加載器接收到了類加載的請求,它自己不會先去加載,會把這個請求委托給父類加載器去執行。

  • 如果父類還存在父類加載器,則繼續向上委托,一直委托到啟動類加載器:Bootstrap ClassLoader

  • 如果父類加載器可以完成加載任務,就返回成功結果,如果父類加載失敗,就由子類自己去嘗試加載,如果子類加載失敗就會拋出ClassNotFoundException異常,這就是雙親委派模式

打破雙親委派模型

用途:

  • Java應用中存在著很多服務提供者接口(Service Provider Interface,SPI),這些接口允許第三方為它們提供實現,如常見的 SPI 有 JDBC、JNDI等,這些 SPI 的接口屬于 Java 核心庫,一般存在rt.jar包中,由Bootstrap類加載器加載。而Bootstrap類加載器無法直接加載SPI的實現類,所以需要反向委派給其他類加載器進行加載

  • 在Tomcat服務器中,存在一個服務器運行多個不同版本但同名服務的需求,所以需要打破雙親委派模型,加載多個同名類。

方法:

  • 使用上下文類加載器

  • 重寫loadClass方法

讀到這里,這篇“Java類加載過程與類加載器是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

河津市| 泽普县| 都昌县| 财经| 大同县| 澜沧| 阳春市| 红河县| 措美县| 邵东县| 张家港市| 天水市| 墨脱县| 太康县| 阿图什市| 永新县| 达孜县| 上高县| 耒阳市| 温州市| 尉氏县| 宁南县| 仲巴县| 德令哈市| 伊金霍洛旗| 米林县| 浦县| 重庆市| 江永县| 来宾市| 永泰县| 大庆市| 阜新| 青海省| 沅江市| 博罗县| 吉林省| 安顺市| 闽侯县| 砚山县| 中西区|