JVM 類加載

① 類加載過程
從上面的圖片我們可以看出整個 JVM 執行的流程中,和程序員關系最密切的就是類加載的過程了,所以
接下來我們來看下類加載的執行流程。
對于一個類來說,它的生命周期是這樣的:

其中前 5 步是固定的順序并且也是類加載的過程,其中中間的 3 步我們都屬于連接,所以對于類加載來
說總共分為以下幾個步驟:
1. 加載
2. 連接
1. 驗證
2. 準備
3. 解析
3. 初始化
下面我們分別來看每個步驟的具體執行內容。
1) 加載
“加載”(Loading)階段是整個“類加載”(Class Loading)過程中的一個階段,它和類加載 Class
Loading 是不同的,一個是加載 Loading 另一個是類加載 Class Loading,所以不要把二者搞混了。
在加載 Loading 階段,Java虛擬機需要完成以下三件事情:
1)通過一個類的全限定名來獲取定義此類的二進制字節流。
2)將這個字節流所代表的靜態存儲結構轉化為方法區的運行時數據結構。
3)在內存中生成一個代表這個類的java.lang.Class對象,作為方法區這個類的各種數據的訪問入口。
2) 驗證
驗證是連接階段的第一步,這一階段的目的是確保Class文件的字節 流中包含的信息符合《Java虛擬機
規范》的全部約束要求,保證這些信 息被當作代碼運行后不會危害虛擬機自身的安全。
驗證選項:
文件格式驗證
字節碼驗證
符號引用驗證...
3) 準備

準備階段是正式為類中定義的變量(即靜態變量,被static修飾的變量)分配內存并設置類變量初始值
的階段。
比如此時有這樣一行代碼:
public static int value = 123;
它是初始化 value 的 int 值為 0,而非 123。
4) 解析
解析階段是 Java 虛擬機將常量池內的符號引用替換為直接引用的過程,也就是初始化常量的過程。
5) 初始化
初始化階段,Java 虛擬機真正開始執行類中編寫的 Java 程序代碼,將主導權移交給應用程序。初始化
階段就是執行類構造器方法的過程。
② 雙親委派模型
提到類加載機制,不得不提的一個概念就是“雙親委派模型”。
站在 Java 虛擬機的角度來看,只存在兩種不同的類加載器:一種是啟動類加載器(Bootstrap
ClassLoader),這個類加載器使用 C++ 語言實現,是虛擬機自身的一部分;另外一種就是其他所有的
類加載器,這些類加載器都由Java語言實現,獨立存在于虛擬機外部,并且全都繼承自抽象類
java.lang.ClassLoader。
站在 Java 開發人員的角度來看,類加載器就應當劃分得更細致一 些。自 JDK 1.2 以來,Java 一直保持
著三層類加載器、雙親委派的類加載架構器。
什么是雙親委派模型?
如果一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父
類加載器去完成,每一個層次的類加載器都是如此,因此所有的加載請求最 終都應該傳送到最頂層的啟
動類加載器中,只有當父加載器反饋自己無 法完成這個加載請求(它的搜索范圍中沒有找到所需的類)
時,子加載器才會嘗試自己去完成加載。

啟動類加載器:加載 JDK 中 lib 目錄中 Java 的核心類庫,即$JAVA_HOME/lib目錄。 擴展類加載
器。加載 lib/ext 目錄下的類。
應用程序類加載器:加載我們寫的應用程序。
自定義類加載器:根據自己的需求定制類加載器。
雙親委派模型的優點
1. 避免重復加載類:比如 A 類和 B 類都有一個父類 C 類,那么當 A 啟動時就會將 C 類加載起來,那
么在 B 類進行加載時就不需要在重復加載 C 類了。
2. 安全性:使用雙親委派模型也可以保證了 Java 的核心 API 不被篡改,如果沒有使用雙親委派模
型,而是每個類加載器加載自己的話就會出現一些問題,比如我們編寫一個稱為 java.lang.Object
類的話,那么程序運行的時候,系統就會出現多個不同的 Object 類,而有些 Object 類又是用戶
自己提供的因此安全性就不能得到保證了。

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

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

相關文章

Android : Spinner(列表選項框) + BaseAdapter -簡單應用

??容器與適配器:????? http://t.csdnimg.cn/ZfAJ7 示例圖: 實體類 Demo.java package com.example.mygridviewadapter.entity;public class Demo {private String text;private int img;public Demo(String text, int img) {this.text…

虛擬機解決Linux中Uos和Deepin登錄密碼忘記的問題 標題Linux Uos Deepin

Uos是切換網絡模式解決的(之前有綁定過用戶) 因為之前用的是橋接模式登錄的時候一直無法聯網,改為Nat模式后可以和電腦共用一個網絡ip,可以重置密碼了,以此解決 ps: 特別說明rw single init/bin/bash 方法和systemd.debug-shell1方法已經失效,不要再做無謂的嘗試了Deepin23社區…

Vue + Element UI 實現復制當前行數據功能(復制到新增頁面組件值不能更新等問題解決)

1、需求 使用Vue Element UI 實現在列表的操作欄新增一個復制按鈕&#xff0c;復制當前行的數據可以打開新增彈窗后亦可以跳轉到新增頁面&#xff0c;本文實現為跳轉到新增頁面。 2、實現 1&#xff09;列表頁 index.vue <el-table> <!-- 其他列 --> <el-t…

JOSEF 漏電繼電器 LLJ-100FG φ45 50-500mA 卡軌安裝

系列型號&#xff1a; LLJ-10F(S)漏電繼電器LLJ-15F(S)漏電繼電器LLJ-16F(S)漏電繼電器 LLJ-25F(S)漏電繼電器LLJ-30F(S)漏電繼電器LLJ-32F(S)漏電繼電器 LLJ-60F(S)漏電繼電器LLJ-63F(S)漏電繼電器LLJ-80F(S)漏電繼電器 LLJ-100F(S)漏電繼電器LLJ-120F(S)漏電繼電器LLJ-125F(S…

推薦一個簡單的在線壓縮PNG和JPG圖片大小的網址

問題描述&#xff1a;推薦一個簡單的在線壓縮PNG和JPG圖片大小的網址 解決&#xff1a; https://www.iloveimg.com/zh-cn/compress-image/compress-png

將對象轉成URL參數

背景 有的時候前端跳轉到其他平臺的頁面需要攜帶額外的參數&#xff0c;需要將對象轉成用 & 連接的字符串拼接在路徑后面。 實現方法

C++中對SQLite進行增刪改查

#include <iostream> #include <sqlite3.h>// 創建數據庫連接 sqlite3* OpenDatabase(const char* dbFilePath) {sqlite3* db;// 打開數據庫if (sqlite3_open(dbFilePath, &db) ! SQLITE_OK) {std::cerr << "Error opening database." <<…

HTTP ERROR 403 No valid crumb was included in the request

1、報錯截圖&#xff1a; 2、產生原因&#xff1a; 開啟了csrf&#xff0c;即跨站請求偽造 3、新版本不支持頁面修改&#xff0c;故需要修改jenkins配置文件 3.1 進入編輯配置文件 vim /etc/sysconfig/jenkins 3.2 修改JENKINS_JAVA_OPTIONS&#xff0c;并保存修改 JENKI…

深度學習之四(循環神經網絡Recurrent Neural Networks,RNNs)

概念 循環神經網絡(Recurrent Neural Networks,RNNs)是一類專門用于處理序列數據的神經網絡,它在處理時考慮了序列數據的順序和上下文信息。RNNs 在自然語言處理、時間序列分析、語音識別等領域得到廣泛應用。 1. 基本結構: RNN 的基本結構包含一個或多個循環單元,每個…

Ubuntu 系統上使用 QQ 郵箱的 SMTP 服務器發送郵件,msmtp(已驗證)

安裝 msmtp sudo apt-get update sudo apt-get install msmtp2 .配置 msmtp nano ~/.msmtprcdefaults auth on tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp.logaccount qq host …

Lua腳本解決redis實現的分布式鎖多條命令原子性問題

線程1現在持有鎖之后&#xff0c;在執行業務邏輯過程中&#xff0c;他正準備刪除鎖&#xff0c;而且已經走到了條件判斷的過程中&#xff0c;比如他已經拿到了當前這把鎖確實是屬于他自己的&#xff0c;正準備刪除鎖&#xff0c;但是此時他的鎖到期了&#xff0c;那么此時線程2…

Android : ExpandableListView(折疊列表) +BaseExpandableListAdapter-簡單應用

示例圖&#xff1a; 實體類DemoData.java package com.example.myexpandablelistview.entity;public class DemoData {private String content;private int img;public DemoData(String content, int img) {this.content content;this.img img;}public String getContent()…

STM32——外部中斷

文章目錄 0.中斷關系映射1.使能 IO 口時鐘&#xff0c;初始化 IO 口為輸入2.設置 IO 口模式&#xff0c;觸發條件&#xff0c;開啟 SYSCFG 時鐘&#xff0c;設置 IO 口與中斷線的映射關系。3.配置NVIC優先級管理&#xff0c;并使能中斷4.編寫中斷服務函數。5.編寫中斷處理回調函…

springboot多數據源集成

springboot多數據源集成 1、添加依賴2、添加配置3、代碼使用4、動態切換數據庫 1、添加依賴 <!--多數據源--> <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version…

[個人筆記] Windows的IT運維筆記

IT技術 - 運維篇 第二章 Windows的IT運維筆記 IT技術 - 運維篇系列文章回顧一、Windows10專業版添加gpedit.msc二、海康威視前端頁面導出通道名稱參考鏈接 系列文章回顧 第一章 快速下載微軟評估版本鏡像的方法 一、Windows10專業版添加gpedit.msc 執行以下bat腳本 echo off…

Rust使用iced構建UI時,如何在界面顯示中文字符

注&#xff1a;此文適合于對rust有一些了解的朋友 iced是一個跨平臺的GUI庫&#xff0c;用于為rust語言程序構建UI界面。 iced的基本邏輯是&#xff1a; UI交互產生消息message&#xff0c;message傳遞給后臺的update&#xff0c;在這個函數中編寫邏輯&#xff0c;然后通過…

護法革命:CIMIVO+SOTUY洗前發膜讓發絲重獲“芯”生

愛美之心人皆有之,經常燙染或者是在太陽下暴曬,都會對發絲造成一定的傷害,一旦發絲受損,就會導致發芯內部角蛋白流失、化學鍵連接斷裂,進而出現各種發質問題。為此,日本知名化妝品集團NABOCUL旗下發芯修護引領品牌ENNEO創新研發兩大核心成分:CIMIVO、SOTUY,能夠從根源修護發芯內…

EXCEL小技巧

1、兩列文本合并顯示&#xff1a; CONCATENATE(B6,E6) &#xff08;如果顯示公式而非文本&#xff0c;就是公式輸錯了&#xff0c;比如后缺少空格&#xff09;

mac 終端配置

Mac iTerm2 配置 安裝 brew install iTerm2安裝完成之后&#xff0c;需要重新打開終端&#xff0c;既可以看見安裝 iTerm2 的效果。 iTerm2 美化 使用 oh-my-zsh 美化 iTerm2 終端 安裝 brew install wget sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/mast…

宇宙工具箱:辦公娛樂兩不誤堪稱手機的百寶箱

宇宙工具箱 宇宙工具箱&#xff0c;提供大量實用工具&#xff0c;多種類型盡在其中&#xff0c;支持圖片/視頻處理、計算、查詢、娛樂等多方內容&#xff0c;滿足用戶使用需求&#xff0c;超多工具直接使用。 獲取資源 詳細獲取地址請點擊 宇宙工具箱 功能特點 1、計算工具…