偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

JVM類加載過(guò)程最全詳解(五大過(guò)程圖解)

開(kāi)發(fā) 前端
在加載階段,JVM會(huì)查找并加載類的字節(jié)碼文件,這個(gè)過(guò)程通常從類路徑(Classpath)中查找類文件,然后將它們讀入內(nèi)存。

JVM類加載

整個(gè)過(guò)程如下圖所示:

圖片圖片

加載

加載階段是類加載的第一步,它的主要任務(wù)是找到并加載類的字節(jié)碼文件。

在加載階段,JVM會(huì)查找并加載類的字節(jié)碼文件,這個(gè)過(guò)程通常從類路徑(Classpath)中查找類文件,然后將它們讀入內(nèi)存。

如下圖所示:

圖片圖片

JVM通過(guò)類加載器(ClassLoader)從類路徑(Classpath)中查找類文件。

加載后的類字節(jié)碼被存儲(chǔ)在方法區(qū)(在JVM規(guī)范中被稱為Metaspace)中,并為每個(gè)類創(chuàng)建一個(gè)Class對(duì)象。

驗(yàn)證

一旦類被加載到內(nèi)存中,JVM會(huì)對(duì)字節(jié)碼文件進(jìn)行驗(yàn)證,以確保其完整性和合法性。

如下圖所示:

圖片圖片

這包括檢查字節(jié)碼文件的結(jié)構(gòu),以防止惡意代碼或錯(cuò)誤的字節(jié)碼文件,確保加載的類符合JVM規(guī)范,不會(huì)危害JVM的安全。

驗(yàn)證主要分為3個(gè)步驟:

1.文件格式驗(yàn)證

在這個(gè)階段,JVM首先檢查字節(jié)碼文件的格式是否合法。

這包括檢查文件頭是否以魔數(shù)開(kāi)頭(通常為0xCAFEBABE),以及文件版本號(hào)是否合適。

2.語(yǔ)義驗(yàn)證 在這個(gè)階段

JVM會(huì)對(duì)字節(jié)碼進(jìn)行語(yǔ)義分析,確保代碼中不會(huì)存在語(yǔ)法錯(cuò)誤和語(yǔ)義錯(cuò)誤。

3.字節(jié)碼驗(yàn)證 在這個(gè)階段

字節(jié)碼驗(yàn)證是最復(fù)雜的一步,它檢查字節(jié)碼是否符合Java語(yǔ)言規(guī)范。

這包括驗(yàn)證操作碼是否合法,跳轉(zhuǎn)指令是否正確,以及棧操作是否匹配。

如果字節(jié)碼驗(yàn)證失敗,JVM會(huì)認(rèn)為這個(gè)類是不安全的,并拒絕加載它。

準(zhǔn)備

Java虛擬機(jī)的類準(zhǔn)備階段是類加載過(guò)程的重要步驟之一,它負(fù)責(zé)為類的靜態(tài)變量分配內(nèi)存并初始化這些變量。

如下圖所示:

圖片圖片

準(zhǔn)備階段為類的靜態(tài)變量分配內(nèi)存,并初始化這些變量為默認(rèn)值(通常為零值,例如0或null)。

例如,對(duì)于以下代碼:

public class MyClass {
    public static int x = 10;
}

在準(zhǔn)備階段,x 的值將被初始化為 10。

解析

解析階段的主要任務(wù):是將類或接口中的符號(hào)引用轉(zhuǎn)化為直接引用。

如下圖所示:

圖片圖片

解析過(guò)程包括以下步驟:

a. 根據(jù)符號(hào)引用的類名找到對(duì)應(yīng)的類。

b. 驗(yàn)證類的可訪問(wèn)性和繼承關(guān)系,確保訪問(wèn)不會(huì)違反訪問(wèn)控制規(guī)則。

c. 找到符號(hào)引用對(duì)應(yīng)的字段或方法,獲取其內(nèi)存地址或偏移量。

d. 最終將符號(hào)引用替換為直接引用,以便在運(yùn)行時(shí)直接訪問(wèn)類、字段或方法。

初始化

初始化階段是類加載的最后一步,它負(fù)責(zé)執(zhí)行類的初始化代碼。

在初始化階段,靜態(tài)代碼塊會(huì)被執(zhí)行,靜態(tài)變量會(huì)被賦予初始值。

如下圖所示:

圖片圖片

在初始化階段中,JVM會(huì)執(zhí)行以下操作:

1.為類的靜態(tài)變量分配內(nèi)存,并設(shè)置初始值

在加載階段中,JVM會(huì)為類的靜態(tài)變量分配內(nèi)存,并設(shè)置默認(rèn)初始值。

2.執(zhí)行類的靜態(tài)代碼塊

在初始化階段中,JVM會(huì)執(zhí)行類的靜態(tài)代碼塊,這些靜態(tài)代碼塊中可以包含任意的Java代碼。

總之:JVM的類加載過(guò)程包括加載、驗(yàn)證、準(zhǔn)備、解析和初始化五個(gè)階段,確保類在被使用之前被正確加載和初始化。

責(zé)任編輯:武曉燕 來(lái)源: mikechen的互聯(lián)網(wǎng)架構(gòu)
相關(guān)推薦

2012-03-01 10:51:37

JavaJVM

2019-07-24 08:34:35

Java對(duì)象數(shù)據(jù)結(jié)構(gòu)

2020-10-19 09:09:46

Class文件加載過(guò)程

2022-01-14 11:45:40

JVM 虛擬機(jī)Java

2021-01-29 06:06:12

JDK15類加載Java

2010-01-06 15:26:14

JSON語(yǔ)法

2010-09-16 15:24:16

JVM結(jié)構(gòu)

2011-03-16 10:19:21

瀏覽器性能測(cè)試

2010-06-12 16:42:03

UML設(shè)計(jì)

2010-10-08 14:04:10

JavaScript網(wǎng)

2024-10-21 16:34:15

2025-06-26 03:33:00

2011-06-22 10:14:49

JVM

2024-09-05 08:28:25

2015-08-05 15:42:10

程序員面試問(wèn)題

2023-08-02 08:38:27

JVM加載機(jī)制

2012-11-06 10:19:18

Java自定義加載Java類

2025-06-03 01:43:00

2011-04-07 14:12:04

Firefox 5.0

2012-12-18 10:09:26

虛擬化應(yīng)用錯(cuò)誤
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)