面試筆記——類加載器

基礎

在這里插入圖片描述

  • 類加載器:用于裝載字節碼文件(.class文件)
  • 運行時數據區:用于分配存儲空間
  • 執行引擎:執行字節碼文件或本地方法
  • 垃圾回收器:用于對JVM中的垃圾內容進行回收

類加載器 :JVM只會運行二進制文件,類加載器的作用就是將字節碼文件加載到JVM中,從而讓Java程序能夠啟動起來。

類加載器分類:
在這里插入圖片描述

  • 啟動類加載器(BootStrap ClassLoader):加載JAVA_HOME/jre/lib目錄下的庫。
  • 擴展類加載器(ExtClassLoader):主要加載JAVA_HOME/jre/lib/ext目錄中的類。
  • 應用類加載器(AppClassLoader):用于加載classPath下的類。
  • 自定義類加載器(CustomizeClassLoader):自定義類繼承ClassLoader,實現自定義類加載規則。

雙親委派模型

加載某一個類,先委托上一級的加載器進行加載,如果上級加載器也有上級,則會繼續向上委托,如果該類委托上級沒有被加載,子加載器嘗試加載該類。

使用雙親委派機制的作用:

  • 通過雙親委派機制可以避免某一個類被重復加載,當父類已經加載后則無需重復加載,保證唯一性。
  • 為了安全,保證類庫API不會被修改。

舉例:
在這里插入圖片描述

類裝載的執行過程

類從加載到虛擬機中開始,直到卸載為止,它的整個生命周期包括了:加載、驗證、準備、解析、初始化、使用和卸載這7個階段。其中,驗證、準備和解析這三個部分統稱為連接(linking)。
在這里插入圖片描述
加載:

  • 通過類的全名,獲取類的二進制數據流。
  • 解析類的二進制數據流為方法區內(元空間)的數據結構(Java類模型) 。
  • 創建java.lang.Class類的實例(堆),表示該類型。作為方法區這個類的各種數據的訪問入口 。

如圖:
在這里插入圖片描述
驗證: 驗證類是否符合 JVM規范,安全性檢查
主要驗證以下4項:
(1)文件格式驗證
(2)元數據驗證
(3)字節碼驗證
(4)符號引用驗證——Class文件在其常量池會通過字符串記錄自己將要使用的其他類或者方法,檢查它們是否存在,如圖:
在這里插入圖片描述

其中,前三項都是格式檢查,如——文件格式是否錯誤、語法是否錯誤、字節碼是否合規。

準備: 為類變量分配內存并設置類變量初始值

  • static變量,分配空間在準備階段完成(設置默認值),賦值在初始化階段完成
  • static變量是final的基本類型,以及字符串常量,值已確定,賦值在準備階段完成
  • static變量是final的引用類型,那么賦值也會在初始化階段完成

解析: 把類中的符號引用轉換為直接引用。
比如:方法中調用了其他方法,方法名可以理解為符號引用,而直接引用就是使用指針直接指向方法。
在這里插入圖片描述

初始化: 對類的靜態變量,靜態代碼塊執行初始化操作。

  • 如果初始化一個類的時候,其父類尚未初始化,則優先初始化其父類。
  • 如果同時包含多個靜態變量和靜態代碼塊,則按照自上而下的順序依次執行。
  • 如果子類訪問父類靜態變量,只觸發父類初始化。

使用:
JVM 開始從入口方法開始執行用戶的程序代碼

  • 調用靜態類成員信息(比如:靜態字段、靜態方法)
  • 使用new關鍵字為其創建對象實例

綜上,類裝載構成為:

  • 加載:查找和導入class文件
  • 驗證:保證加載類的準確性
  • 準備:為類變量分配內存并設置類變量初始值
  • 解析:把類中的符號引用轉換為直接引用
  • 初始化:對類的靜態變量,靜態代碼塊執行初始化操作
  • 使用:JVM 開始從入口方法開始執行用戶的程序代碼
  • 卸載:當用戶程序代碼執行完畢后,JVM便開始銷毀創建的Class對象。

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

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

相關文章

Gateway基礎配置指南

Gateway基礎配置指南 一、引言 隨著微服務架構的普及,API網關(Gateway)作為微服務架構中的關鍵組件,其重要性日益凸顯。Gateway作為系統的唯一入口,負責處理所有客戶端的請求,并根據業務規則將請求轉發到…

快速上手prometheaus grafana 監控

介紹 prometheaus 一個定時輸出指標數據的巡檢組件? grafana 一個讀取指標,可視化的提供了好看界面的組件? 教程 如何和springboot項目集成 【IT老齊153】超級實用!十分鐘掌握Prometheus與Grafana監控SpringBoot應用_嗶哩嗶哩_…

【知識碎片】2024_05_10

每日代碼 至少是其他數兩倍的最大數 . - 力扣&#xff08;LeetCode&#xff09; int dominantIndex(int* nums, int numsSize) {int max_num 0;int next_max 0;int pos 0;for(int i 0; i < numsSize; i){if(nums[i] > max_num) {pos i;next_max max_num;max_num…

如何使用 ERNIE 千帆大模型基于 Flask 搭建智能英語能力評測對話網頁機器人(詳細教程)

ERNIE 千帆大模型 ERNIE-3.5是一款基于深度學習技術構建的高效語言模型&#xff0c;其強大的綜合能力使其在中文應用方面表現出色。相較于其他模型&#xff0c;如微軟的ChatGPT&#xff0c;ERNIE-3.5不僅綜合能力更強&#xff0c;而且在訓練與推理效率上也更高。這使得ERNIE-3…

JVM調優—減少FullGC

背景 最近負責了一個審批流程新項目&#xff0c;帶領了幾個小伙伴&#xff0c;哼哧哼哧的干了3個月左右&#xff0c;終于在三月底完美上線了&#xff0c;好消息是線上客戶用的很絲滑&#xff0c;除了幾個非常規的業務提單之外&#xff0c;幾乎沒有什么大的問題&#xff0c;但是…

行駛證OCR識別接口怎么對接

行駛證OCR識別接口也叫行駛證文字識別OCR接口,指的是傳入行駛證照片&#xff0c;精準識別靜態行駛證圖像上的文字信息。那么行駛證OCR識別接口怎么對接呢&#xff1f; 首先我們找到數脈API,然后注冊賬戶&#xff0c;購買免費套餐 然后就需要公司的技術大牛把行駛證文字識別OCR…

gdb調試功能描述

gdb調試功能描述 gdb 調試&#xff1a;只對可執行文件進行調用&#xff0c;無法直接用gdb調試.c文件 1.查找命令幫助&#xff1a; &#xff08;gdb&#xff09; help data &#xff08;gdb&#xff09; help call -l (list) 查看載入文件&#xff08;默認為10行&#xff09…

短信群發公司通道有哪些要求

短信群發公司通道有哪些要求 網絡穩定性 短信群發公司的通道在進行時需要具備良好的網絡穩定性。這意味著通道需要能夠穩定連接到互聯網&#xff0c;并具備高速傳輸能力。在網絡不穩定或者傳輸速度慢的情況下&#xff0c;可能會受到影響&#xff0c;甚至導致失敗。 高可靠性 …

linux - 主次設備號自動申請

alloc_chrdev_region 原型如下&#xff0c;該函數向內核申請一個空閑的主設備號。 alloc_chrdev_region(&g_aputriger_dev, 0, APUTRIGER_MAX_NUM, "aputriger0"); 第四個參數是我們使用cat /proc/devices 看到的名稱 /*** alloc_chrdev_region() - register a…

持續總結中!2024年面試必問 100 道 Java基礎面試題(四十)

上一篇地址&#xff1a;持續總結中&#xff01;2024年面試必問 100 道 Java基礎面試題&#xff08;三十九&#xff09;-CSDN博客 七十九、Java泛型中的T、R、K、V、E分別指什么&#xff1f; 在Java泛型中&#xff0c;T、R、K、V 和 E 是類型參數的常見占位符&#xff0c;它們用…

Babylon.js 7.0開發入門教程

Babylon.js 是一個功能強大的開源 3D 引擎&#xff0c;能夠使用 JavaScript 渲染交互式 3D 和 2D 圖形。它是為 Web 甚至 VR 創建游戲、演示、可視化和其他 3D 應用程序的絕佳選擇。Babylon.js最新版本是7.0。 Babylon.js 是免費、開源和跨平臺的&#xff0c;是 Unity 和 Unre…

LeetCode 每日一題 ---- 【1463.摘櫻桃 II】

LeetCode 每日一題 ---- 【1463.摘櫻桃 II】 1463.摘櫻桃II方法&#xff1a;動態規劃&#xff08;遞推&#xff09; 1463.摘櫻桃II 方法&#xff1a;動態規劃&#xff08;遞推&#xff09; 昨天是摘櫻桃I&#xff0c;今天是II&#xff0c;與昨天的區別主要在于&#xff0c;今…

【進程替換】多進程程序替換原理 | 進程程序替換函數 | execlexecv | execlpexecvp

目錄 多進程程序替換 多進程程序替換原理 進程程序替換函數詳解 execl&execv execlp&execvp execle&execvpe execve 多進程程序替換 我們想要進程替換的同時不影響舊的進程&#xff08;使用多進程版&#xff09;fork創建子進程&#xff0c;讓子進程去替換執…

2008NOIP普及組真題 4. 立體圖

線上OJ&#xff1a; 一本通-1977&#xff1a;【08NOIP普及組】立體圖 核心思想&#xff1a; 本題采用模擬方法一個一個畫小方塊&#xff08;雖然畫的是立體空間的積木&#xff0c;但本質還是在二維平面上畫圖形&#xff09; 本題的難點在于&#xff1a; 1、如何確定二維平面畫…

tengine-docker鏡像制作

1.下載 wget https://tengine.taobao.org/download/tengine-3.0.0.tar.gz 或者直接下載這個包括下邊兩個配置文件了 https://download.csdn.net/download/cyw8998/89286114 2.編輯nginx.conf文件 #####user nobody; worker_processes 1;#error_log logs/error.log; #er…

淺析擴散模型與圖像生成【應用篇】(二十三)——Imagic

23. Imagic: Text-Based Real Image Editing with Diffusion Models 該文提出一種基于文本的真實圖像編輯方法&#xff0c;能夠根據純文本提示&#xff0c;實現復雜的圖像編輯任務&#xff0c;如改變一個或多個物體的位姿和組成&#xff0c;并且保持其他特征不變。相比于其他文…

c語言題庫之序列合并

文章目錄 前言C語言題目&#xff1a;分析1. 合并邏輯2.圖解合并邏輯 代碼實現注意事項總結思考 前言 在編程中&#xff0c;我們經常遇到需要將兩個有序序列合并為一個有序序列的問題。下面&#xff0c;我們就來詳細探討一下如何解決這個問題&#xff0c;包括輸入處理、合并邏輯…

python 根據網址和關鍵詞批量下載影像

最近用到了GLASS的LAI產品&#xff0c;但這個產品的文件夾分得很細&#xff0c;我需要的影像又有8個瓦片&#xff0c;一個一個點擊很麻煩&#xff0c;于是探索了批量下載的方法 一、下載1幅 import requests import re import os import requests import re# 網頁URLurl &…

深入理解Java HashSet類及其實現原理

哈嘍&#xff0c;各位小伙伴們&#xff0c;你們好呀&#xff0c;我是喵手。運營社區&#xff1a;C站/掘金/騰訊云&#xff1b;歡迎大家常來逛逛 今天我要給大家分享一些自己日常學習到的一些知識點&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相學習&#xff0c;一…