類加載過程?類隔離了解過嗎?


類加載過程詳解

類加載是 JVM 將類的字節碼從磁盤、網絡或其他來源加載到內存,并轉換為 Class 對象的過程,主要分為以下 五個階段


1. 加載(Loading)
  • 任務:查找類的二進制字節流(如 .class 文件、JAR 包、動態代理生成等),并將其轉換為方法區的運行時數據結構。
  • 觸發條件
    • 首次創建類實例(new)。
    • 訪問類的靜態字段或方法。
    • 反射調用(如 Class.forName())。
  • 類加載器
    • 引導類加載器(Bootstrap ClassLoader):加載 JRE/lib 核心庫(如 rt.jar)。
    • 擴展類加載器(Extension ClassLoader):加載 JRE/lib/ext 擴展庫。
    • 應用類加載器(Application ClassLoader):加載用戶類路徑(-classpath)的類。
    • 自定義類加載器:用戶繼承 ClassLoader 實現,用于特定場景(如熱部署、模塊化)。

2. 驗證(Verification)

確保字節碼符合 JVM 規范,防止惡意代碼攻擊,具體檢查:

  • 文件格式驗證:魔數、版本號等是否符合規范。
  • 元數據驗證:類是否有父類、是否實現接口等語義檢查。
  • 字節碼驗證:控制流是否合法(如跳轉指令不越界)。
  • 符號引用驗證:引用的類、方法、字段是否存在(發生在解析階段)。

3. 準備(Preparation)
  • 任務:為 靜態變量 分配內存并設置初始值(零值)。
    • 示例:static int value = 123; 在此階段 value 被賦值為 0,而非 123
  • 特殊處理:若字段為 final 常量(static final),直接賦真實值(如 static final int value = 123;)。

4. 解析(Resolution)

將常量池中的 符號引用 轉換為 直接引用

  • 符號引用:以文本形式描述引用的目標(如 java/lang/Object)。
  • 直接引用:指向目標在內存中的指針、偏移量或句柄。
  • 解析類型:類/接口、字段、方法、方法類型等。

5. 初始化(Initialization)
  • 任務:執行類構造器 <clinit>() 方法,合并所有靜態代碼塊和靜態變量賦值操作。
  • 觸發條件:類被首次主動使用時(如 new、訪問靜態字段)。
  • 線程安全:JVM 保證 <clinit>() 方法在多線程下被正確加鎖同步。

類隔離的實現與原理

類隔離的核心是通過 不同的類加載器 加載同名類,使 JVM 將其視為不同的類,從而避免沖突。以下是常見實現方式:


1. 類加載器的命名空間
  • 規則:每個類由其加載器和全限定名(如 com.example.MyClass)共同唯一標識。
  • 示例
    ClassLoader loader1 = new MyClassLoader();
    ClassLoader loader2 = new MyClassLoader();
    Class<?> class1 = loader1.loadClass("com.example.MyClass");
    Class<?> class2 = loader2.loadClass("com.example.MyClass");
    // class1 != class2,即使字節碼相同
    
2. 雙親委派模型的打破

默認類加載器遵循 雙親委派模型(優先由父加載器加載),但在隔離場景下需打破該模型:

  • 自定義類加載器:重寫 loadClass() 方法,直接加載特定路徑的類,不委托父加載器。
  • 應用場景
    • Tomcat WebApp 隔離:每個 Web 應用使用獨立的 WebappClassLoader,加載 /WEB-INF/classes/WEB-INF/lib 下的類。
    • OSGi 模塊化:每個 Bundle 有自己的類加載器,實現動態模塊化。
3. 模塊化系統(Java 9+)

通過 JPMS(Java Platform Module System) 實現更細粒度的類隔離:

  • 模塊描述符(module-info.java):定義模塊的導出包和依賴關系。
  • 類可見性控制:未導出的包對其他模塊不可見,徹底隔離實現細節。

類隔離的實際應用

場景實現方式優勢
多版本庫共存不同類加載器加載不同版本的 JAR(如 Log4j 1.x 和 2.x)。避免版本沖突
微服務熱部署每個服務使用獨立類加載器,重啟服務時替換類加載器實現無停機更新。提升系統可用性
插件化架構插件作為獨立模塊,由專屬類加載器加載,主程序通過接口交互。動態擴展功能

🐶

  • 類加載過程:加載 → 驗證 → 準備 → 解析 → 初始化,確保類合法且可用。
  • 類隔離機制:通過類加載器命名空間和打破雙親委派,實現多版本共存、模塊化等需求。
  • 應用價值:解決依賴沖突、支持熱部署、構建靈活架構,是現代 Java 應用的核心技術之一。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75323.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75323.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75323.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用msmtp和mutt在CentOS上發送指定目錄下的所有文件作為郵件附件

1.安裝 msmtp&#xff1a; 如果尚未安裝&#xff0c;請先通過以下命令安裝msmtp。 sudo yum install msmtp 2.配置 msmtp 使用新浪郵箱&#xff1a; 創建或編輯配置文件~/.msmtprc&#xff0c;輸入以下內容&#xff08;記得替換授權碼&#xff09;。 defaults tls on tls_st…

Vue+Elementui首頁看板

源碼 <template><!-- 查詢條件--><div class="optimize-norm" v-loading="selectDataLoading"><el-form :model="queryParams" ref="queryRef" style="padding-bottom:8px" :inline="true"…

匯編學習之《指針寄存器大小端學習》

什么是指針寄存器&#xff1f; 操作棧的寄存器 棧&#xff1a; 保存函數里面傳遞的參數&#xff0c;局部變量等。 EBP&#xff1a; 指向棧底的指針 ESP&#xff1a; 指向棧頂的指針。 計算入棧地址變化規則 通過OllDbg查看 有可能點擊安裝的時候棧區域第一次查看會沒有顯…

Oracle數據庫數據編程SQL<3.7 PL/SQL 觸發器(Trigger)>

觸發器是Oracle數據庫中的一種特殊存儲過程&#xff0c;它會在特定數據庫事件發生時自動執行。觸發器通常用于實現復雜的業務規則、數據驗證、審計跟蹤等功能。 目錄 一、觸發器基本概念 1. 觸發器特點 2. 觸發器組成要素 二、觸發器類型 1. DML觸發器 2. DDL觸發器 3.…

2025年滲透測試面試題總結-某 攜程旅游-基礎安全工程師(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 攜程旅游-基礎安全工程師 反序列化原理 核心原理 擴展分析 SQL注入本質 核心原理 擴展分析 SQL注…

CSS 邊框(Border)樣式詳解

CSS 邊框&#xff08;Border&#xff09;樣式詳解 CSS 提供了多種邊框樣式&#xff0c;使我們能夠控制元素的外觀。本文將詳細介紹 CSS 邊框的各種屬性及應用示例。 1. 基本邊框屬性 CSS 主要使用 border 相關屬性定義邊框&#xff0c;基本語法如下&#xff1a; border: [邊…

SpringCould微服務架構之Docker(6)

容器的基本命令&#xff1a; 1. docker exec &#xff1a;進入容器執行命令 2. docker logs: -f 持續查看容器的運行日志 3. docker ps&#xff1a;查看所有運行的容器和狀態 案例&#xff1a;創建運行一個容Nginx容器 docker run--name myNginx -p 80:80 -d nginx 命…

unity3d端監聽 uri scheme

一、消息監聽 1.創建一個腳本命名為 “URISchemeListener” &#xff0c;用于接收URI消息&#xff08;代碼如下&#xff09;。 using System; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.UI;public class URISchemeListener : MonoBehavio…

網絡信息安全應急演練方案

信息安全應急演練方案 總則 &#xff08;一&#xff09;編制目的 旨在建立并完善應對病毒入侵、Webshell 攻擊以及未授權訪問等信息安全突發事件的應急機制&#xff0c;提升組織對這類事件的快速響應、協同處理和恢復能力&#xff0c;最大程度降低事件對業務運營、數據安全和…

電商場景下高穩定性數據接口的選型與實踐

在電商系統開發中&#xff0c;API接口需要應對高并發請求、動態數據更新和復雜業務場景。我將重點解析電商場景對數據接口的特殊需求及選型方案。 一、電商API必備的四大核心能力 千萬級商品數據實時同步 支持SKU基礎信息/價格/庫存多維度更新每日增量數據抓取與歷史版本對比…

Android R adb remount 調用流程

目的&#xff1a;調查adb remount 與adb shell進去后執行remount的差異 調試方法&#xff1a;添加log編譯adbd,替換system\apex\com.android.adbd\bin\adbd 一、調查adb remount實現 關鍵代碼&#xff1a;system\core\adb\daemon\services.cpp unique_fd daemon_service_to…

多模態大語言模型arxiv論文略讀(二)

Identifying the Correlation Between Language Distance and Cross-Lingual Transfer in a Multilingual Representation Space ?? 論文標題&#xff1a;Identifying the Correlation Between Language Distance and Cross-Lingual Transfer in a Multilingual Representat…

【運維】負載均衡

老規矩&#xff0c;先占坑&#xff0c;后續更新。 開頭先理解一下所謂的“均衡”&#xff0c;不能狹義地理解為分配給所有實際服務器一樣多的工作量&#xff0c;因為多臺服務器的承載能力各不相同&#xff0c;這可能體現在硬件配置、網絡帶寬的差異&#xff0c;也可能因為某臺…

大型語言模型Claude的“思維模式”最近被公開解剖

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

Ubuntu環境安裝

1. 安裝gcc、g和make sudo apt update sudo apt install build-essential 2. 安裝cmake ubuntu安裝cmake的三種方法&#xff08;超方便&#xff01;&#xff09;-CSDN博客 3. 安裝ssh sudo apt-get install libssl-dev

【力扣hot100題】(028)刪除鏈表的倒數第N個節點

鏈表題還是太簡單了。 怕越界所以先定義了一個頭結點的頭結點&#xff0c;然后定義快慢指針&#xff0c;快指針先走n步&#xff0c;隨后一起走&#xff0c;直到快指針走到頭&#xff0c;刪除慢指針后一個節點即可。 /*** Definition for singly-linked list.* struct ListNod…

C/C++回調函數實現與std::function和std::bind介紹

1 概述 回調函數是一種編程模式&#xff0c;指的是將一個函數作為參數傳遞給另一個函數&#xff0c;并在某個特定事件發生時或滿足某些條件時由該函數調用。這種機制允許你定義在特定事件發生時應執行的代碼&#xff0c;從而實現更靈活和模塊化的程序設計。 2 傳統C/C回調實現…

【藍橋杯】單片機設計與開發,速成備賽

一、LED模塊開看&#xff0c;到大模板 二、刷第零講題目&#xff08;直接復制模板&#xff09; 三、空降芯片模板直接調用部分&#xff08;聽完再敲代碼&#xff09; 四、第十三講開刷省賽題&#xff08;開始自己背敲模板&#xff09; 五、考前串講刷一遍 b連接&#xff1…

Java 基礎-28- 多態 — 多態下的類型轉換問題

在 Java 中&#xff0c;多態&#xff08;Polymorphism&#xff09;是面向對象編程的核心概念之一。多態允許不同類型的對象通過相同的方法接口進行操作&#xff0c;而實際調用的行為取決于對象的實際類型。雖然多態提供了極大的靈活性&#xff0c;但在多態的使用過程中&#xf…

Epub轉PDF軟件Calibre電子書管理軟件

Epub轉PDF軟件&#xff1a;Calibre電子書管理軟件 https://download.csdn.net/download/hu5566798/90549599 一款好用的電子書管理軟件&#xff0c;可快速導入電腦里的電子書并進行管理&#xff0c;支持多種格式&#xff0c;閱讀起來非常方便。同時也有電子書格式轉換功能。 …