JVM類加載機制以及雙親委派模型的介紹

目錄

1.類加載介紹

2.具體步驟

2.1加載

2.2驗證

2.3準備

2.4解析

2.5初始化

3.加載過程中的策略-雙親委派模型


1.類加載介紹

類加載,指的是Java進程在運行的時候,把.class文件從硬盤讀取到內存,并進行一系列校驗解析的過程.

.class文件=>類對象.硬盤=>內村

類加載的過程在Java官方文檔中有說明

類加載大致可以分為五個步驟:即 加載.驗證 準備 解析 初始化這五個步驟.

下面我們分別來介紹這五個步驟干了一些什么

2.具體步驟

2.1加載

把硬盤上的.class文件找到并且打開文件,讀取到文件內容.(具體就是二進制的數據)

2.2驗證

此過程要確保讀到的文件內容是合法的.class文件格式,即字節碼文件格式

具體在Java虛擬機規范中有具體的說明.

類似于一個結構體的東西?

其中,u4表示四個字節的無符號證書,u2是連個字節的無符號整數.這里的描述方式類似于C語言中的結構體.contant_pool_count是主版本.下面的是次版本/ jvm執行.class文件的時候就會驗證版本是否符合要求,一般高版本可以兼容低版本,反之則不行.magic也叫做magic number 是魔幻數字,廣泛應用于二進制文件中,用來標識當前二進制文件的格式是哪種類型

2.3準備

這一步是給類對象申請內存空間.此時申請的內存空間是已經初始化的.里面的默認值為全0.在這個階段中,類對象的靜態成員變量的值也相對于是0了.

2.4解析

主要是對類的字符串常量進行處理 我們觀察一下代碼:

class Test{

?private String s = "hello";

}

上述代碼中,s變量相對于保存了"hello"這個字符串常量的地址.但是文件中并沒有地址這個概念,那么該如何保存呢?雖然沒有地址,但是有一個類似于地址的偏移量的這一概念

/

此除文件填充給s "hello"的偏移量就可以叫做"符號引用"

接下來,我們把.class文件加載到內存中,就會把"hello"這個字符串加載到內存中.此時它就有地址了,接下來,就可以把s里的值替換成當前"hello"的真實地址了.

2.5初始化

針對對象完成后續的初始化,就是把各個部分的屬性進行賦值填充.=>還要執行靜態代碼的邏輯,黑客拿會觸發父類的加載.

而加載過程中也有很多的貓膩.這就涉及到加載環節的一個模型,即雙親委派模型

3.加載過程中的策略-雙親委派模型

該策略描述了如何查找.class文件的策略/

jvm中進行類加載的操作,有一個專門的模塊,稱為類加載器(ClassLoader)

JVM的類加載器默認有三個.(也可以自定義 ) 這三個分別是?
BootstrapClassLoader? -負責查找標準庫的目錄

ExtensionClassLoader - 負責查找擴展庫的目錄 (不同于Java語法規范中的標準庫內容,這都是實現jvm的廠商額外擴充的功能,不同的廠商擴展的不一樣,這塊內容很少會用到了)

ApplicationLoader -負責查找當前項目和第三方庫的目錄

上述的三個類加載器存在父子關系,類似于二叉樹,有一個指針 (引用)指向parent,指向自己的父類加載器.

雙親委派模型的工作過程

1.從ApplicationClassLoader為入口 開始工作

2?從ApplicationClassLoader不會立即工作而是把搜索任務較給自己的父親ExtensionClassLoader

3ExtensionClassLoader也不會立即尋找,而是交給BootstrapClassLoader?

4BootstrapClassLoader 也不會立即找,也會找自己的父親

5.BootstrapClassLoader 發現自己沒有父親,才會開始搜索目錄,即標準庫的內容 尋找符合要求的.class文件,如果找到了就開始打開文件.讀文件.如果沒找到就交給自己的孩子.嘗試加載

6.ExtensionClassLoader收到父親的任務后,自己搜尋.找到了進入后續流程.找不到就繼續到孩子這一類加載器中嘗試加載

7?ApplicationClassLoader開始搜索,如果找到了.就繼續后面的,如果沒找到就搜索自己的孩子,一般來說ApplicationClassLoader它已經沒有孩子了,這時候還是找不到,就會拋出一個ClassNotFountExption異常.

按照上述的設定,如果代碼中自己定義了一個和標準庫一樣名字的類,最終程序的執行效果,自己定義的不會被加載,而是會加載標準庫中的類.

可以避免自己寫的類名字和標準庫重名了,導致標準庫的類功能失效.

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

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

相關文章

spring-boot自定義網站頭像(favicon.ico文件)

一、將ico文件存放到resources目錄的static中的favicon下。 二、在application.properties文件中增加配置 spring.mvc.favicon.enabledfalse 三、如需頁面引用如下&#xff1a; <link rel"icon" type"image/x-icon" ref"${request.contextPat…

智能駕駛規劃控制理論學習03-基于采樣的規劃方法

目錄 一、基于采樣的規劃方法概述 二、概率路圖&#xff08;PRM&#xff09; 1、核心思想 2、實現流程 3、算法描述 4、節點連接處理 5、總結 三、快速搜索隨機樹&#xff08;RRT&#xff09; 1、核心思想 2、實現流程 3、總結 4、改進RRT算法 ①快速搜索隨機圖&a…

【計算機網絡實踐】在windows上配置Xshell和Xftp連接Ubuntu系統

hebut的課下作業&#xff0c;學習使用Xshell和Xftp連接Linux系統 1. 軟件需求 Windows10/11、已安裝VM虛擬機的ubuntu系統、Xshell、Xftp。 Xshell和Xftp在家庭/學校免費 - NetSarang Website (xshell.com)里面可以下載到&#xff0c;上面需要的兩個軟件都在&#xff0c;官網免…

運籌學_1.1.2 線性規劃問題-圖解法

1.1.2 線性規劃問題-圖解法 一、圖解法求解步驟&#xff08;只適用于兩個決策變量問題&#xff09;二、圖解法作圖實例三、圖解法分析線性規劃幾種解的情況1、唯一最優解2、無窮多最優解3、無界解4、無解或無可行解 四、圖解法的幾點啟示 一、圖解法求解步驟&#xff08;只適用…

C++sort排序

前言&#xff1a; C語言的sort函數是一類用于數組排序的函數以下是其簡單的使用&#xff1a; 1.頭文件&#xff1a; #include<algorithm> 2.使用命名空間&#xff1a; using namespace std; 3.函數形式&#xff1a; sort(數組名,數組名元素個數,排序函數); 默認排…

深入淺出Redis(一):對象與數據結構

引言 Redis是一款基于鍵值對的數據結構存儲系統&#xff0c;它的特點是基于內存操作、單線程處理命令、IO多路復用模型處理網絡請求、鍵值對存儲與簡單豐富的數據結構等等 這篇文章主要圍繞Redis中的對象與數據結構來詳細說明鍵值對存儲與簡單豐富的數據結構這兩大特點 Redi…

運籌學_1.1.4 線性規劃問題-解的概念

1.1.4 線性規劃問題-解的概念 一、可行解與最優解二、基的概念三、基變量、基向量&#xff1b;非基變量、非基向量&#xff1b;基解、基可行解&#xff1b;四、最優解與可行解、基可行解的關系五、用例題&#xff08;枚舉法&#xff09;鞏固基解、基可行解、最優解三個概念1、例…

flyway實戰

flyway是一款用來管理數據庫版本的工具框架 一, 添加依賴 <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId> </dependency> <dependency><groupId>org.springframework</groupId>&l…

第十一屆藍橋杯省賽第一場C++ A組 / B組《網絡分析》(c++)

1.題目說明 小明正在做一個網絡實驗。 他設置了 n 臺電腦&#xff0c;稱為節點&#xff0c;用于收發和存儲數據。 初始時&#xff0c;所有節點都是獨立的&#xff0c;不存在任何連接。 小明可以通過網線將兩個節點連接起來&#xff0c;連接后兩個節點就可以互相通信了。 兩…

代碼隨想錄算法訓練營第二十五天 | 216.組合總和III 17.電話號碼的字母組合

216.組合總和III https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:result [] # 存放結果集sel…

實現一個移動端焦點輪播圖

HTML結構&#xff1a; 創建一個輪播圖的容器&#xff0c;并在其中放置輪播圖片。 <div id"carousel"> <div class"carousel-item active"> <img src"image1.jpg" alt"Image 1"> </div> <div class&q…

Docker部署ZooKeeper

在分布式系統中,ZooKeeper是一個關鍵的組件,用于協調和管理多個節點之間的狀態。本文將詳細介紹如何使用Docker安裝和部署ZooKeeper,包括非集群部署和集群部署兩種情況。 非集群部署 前期準備 在開始之前,請確保你已經安裝了Docker,并且擁有sudo權限。 關閉防火墻和SEL…

5、DVWA代碼審計(2)

一、csrf 1、csrf(low) 限制 復現 GET /vulnerabilities/csrf/?password_new123456&password_conf123456&ChangeChange HTTP/1.1 Host: ddd.com Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,…

電子電器架構 —— DoIP協議相關的介紹

電子電器架構 —— DoIP協議相關的介紹 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 沒有人關注你。也無需有人關注你。你必須承認自己的價值,你不能站在他人的角度來反對自己。人生在世,最怕…

監聽者的力量:探索觀察者模式和spring使用

觀察者模式是一種對象行為型設計模式&#xff0c;它定義了對象之間的一對多依賴關系。 觀察者模式通常用于實現分布式事件處理系統、新聞代理或MVC框架的一部分。在這種模式中&#xff0c;一個對象&#xff08;稱為“主題”或“可觀察對象”&#xff09;維護一系列依賴于它的對…

vue3編寫H5適配橫豎屏

具體思路如下&#xff1a; 1、監聽瀏覽器屏幕變化&#xff0c;通過監聽屏幕寬高&#xff0c;辨別出是橫屏&#xff0c;還是豎屏狀態 在項目的起始根頁面進行監聽&#xff0c;我就是在App.vue文件下進行監聽 代碼如下&#xff1a; <template><RouterView /> <…

【Spring IoC】實驗四:特殊值處理

個人名片&#xff1a; &#x1f43c;作者簡介&#xff1a;一名大三在校生&#xff0c;喜歡AI編程&#x1f38b; &#x1f43b;???個人主頁&#x1f947;&#xff1a;落798. &#x1f43c;個人WeChat&#xff1a;hmmwx53 &#x1f54a;?系列專欄&#xff1a;&#x1f5bc;?…

Java4種創建線程方式

目錄 一&#xff1a;繼承Thread 二&#xff1a;重新Runnable接口 三&#xff1a;Callable 四&#xff1a;lambda 一&#xff1a;繼承Thread public static void main(String[] args) {Thread1 t1new Thread1();t1.start(); } class Thread1 extends Thread {Overridepublic…

C++ //練習 10.16 使用lambda編寫你自己版本的biggies。

C Primer&#xff08;第5版&#xff09; 練習 10.16 練習 10.16 使用lambda編寫你自己版本的biggies。 環境&#xff1a;Linux Ubuntu&#xff08;云服務器&#xff09; 工具&#xff1a;vim 代碼塊 /*******************************************************************…

BERTopic安裝最全教程及報錯處理

BERTopic安裝 BERTopic的安裝比較復雜,直接安裝會報錯 安裝方法1,.whl文件安裝 ERROR: Could not build wheels for hdbscan, which is required to install pyproject.toml-based projects正確安裝流程 查看python能安裝whl的版本pip debug --verbose Compatible tags: 2…