成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

類是如何加載的?你學會了嗎?

開發 前端
初始化階段,Java 虛擬機真正開始執行類中編寫的 Java 程序代碼,將主導權移交給應用程序。到這一步驟之后,類的加載過程就算正式完成了,此時會給靜態變量設置初始值,并執行靜態代碼塊的內容。

在 Java 中,類加載的流程有一個專門的機制叫做“類加載機制”。類加載機制是指一個類在 Java 虛擬機(JVM)中的執行流程,它也是 Java 程序能夠正常執行的關鍵所在,那它的具體執行流程是啥?接下來我們一起來看。

流程概述

在 JVM 中,類加載會經歷以下 5 個階段:

  1. 加載階段(Loading)
  2. 驗證階段(Verification)
  3. 準備階段(Preparation)
  4. 解析階段(Resolution)
  5. 初始化階段(Initialization)

其中:驗證階段、準備階段和解析階段合起來又稱為連接階段,所以以上 5 個階段又可以劃分為 3 大類:

  1. 加載階段(Loading)
  2. 連接階段(Linking)
  1. 驗證階段(Verification)
  2. 準備階段(Preparation)
  3. 解析階段(Resolution)
  1. 初始化階段(Initialization)

具體分類如下圖所示:

圖片

這 3 大類、5 個流程的具體執行細節是這樣的。

1.加載階段

簡單來說,加載階段就是將類文件加載到內存中的過程。在加載階段,JVM 需要完成以下 3 件事:

  1. 通過一個類的全限定名來獲取定義此類的二進制字節流;
  2. 將這個字節流所代表的靜態存儲結構轉化為方法區的運行時數據結構;
  3. 在內存中生成一個代表這個類的 java.lang.Class 對象,作為方法區這個類的各種數據的訪問入口。

2.連接階段

連接階段又分為:驗證階段(Verification)、準備階段(Preparation)和解析階段(Resolution),具體執行的細節如下。

2.1 驗證階段

驗證階段也叫做校驗階段,它主要是用來驗證加載到內存中的類是否是安全合規的文件,驗證的主要動作大概有以下幾個(當然,以下細節如果實在記不住也沒關系):

  • 文件格式校驗包括常量池中的常量類型、Class 文件的各個部分是否被刪除或被追加了其他信息等;
  • 元數據校驗包括父類正確性校驗(檢查父類是否有被 final 修飾)、抽象類校驗等;
  • 字節碼校驗,此步驟最為關鍵和復雜,主要用于校驗程序中的語義是否合法且符合邏輯;
  • 符號引用校驗,對類自身以外比如常量池中的各種符號引用的信息進行匹配性校驗。

2.2 準備階段

準備階段就開始給類中的靜態變量設置默認值了,注意這里不是給靜態變量設置初始值,而是設置默認值,二者還是有很大區別的。舉個例子,比如代碼中寫的內容是:

public static int number = 10;

那么此時是給 number 變量設置的 int 值是默認值 0,而非初始值 10。

2.3 解析階段

解析階段就是將常量池中的符號引用更換成直接引用了,所謂的符號引用是指以一組符號來描述所引用的目標,符號可以是任何形式的字面量,只要使用時能無歧義地定位到目標即可;而直接引用是可以直接指向目標的指針、相對偏移量或者是一個能間接定位到目標的句柄。符號引用和直接引用有一個重要的區別:使用符號引用時被引用的目標不一定已經加載到內存中;而使用直接引用時,引用的目標必定已經存在虛擬機的內存中了。

3.初始化階段

初始化階段,Java 虛擬機真正開始執行類中編寫的 Java 程序代碼,將主導權移交給應用程序。到這一步驟之后,類的加載過程就算正式完成了,此時會給靜態變量設置初始值,并執行靜態代碼塊的內容。

總結

類加載流程總共分為 3 大類,5 個主要流程:

  1. 加載階段(Loading):將類文件加載到內存。
  2. 連接階段(Linking)
  1. 驗證階段(Verification):類文件安全性效驗。
  2. 準備階段(Preparation):給靜態變量設置默認值。
  3. 解析階段(Resolution):將符號引用轉換為直接引用。
  1. 初始化階段(Initialization):執行靜態代碼塊和給靜態變量設置初始值。


責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2023-03-17 16:44:44

Channel進程模型

2024-08-09 08:17:07

SSH服務器架構

2023-06-15 14:10:00

kubeletCNI插件

2023-12-11 08:03:01

Java線程線程組

2022-08-08 08:17:43

類隔離加載器自定義類

2024-11-29 08:53:46

2022-07-08 09:27:48

CSSIFC模型

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2023-10-06 00:01:08

UML類圖圖形

2024-11-28 10:32:32

2022-11-30 09:54:57

網絡令牌身份驗證

2024-02-02 11:03:11

React數據Ref

2023-12-27 09:32:47

SQL語句數據

2023-08-01 12:51:18

WebGPT機器學習模型

2024-01-02 12:05:26

Java并發編程

2022-08-29 08:05:44

Go類型JSON

2024-01-05 07:46:15

JS克隆對象JSON
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久乐国产精品 | 欧美一卡二卡在线观看 | 精品综合久久久 | 免费毛片网站 | 亚洲电影在线播放 | 国产 日韩 欧美 在线 | 麻豆av免费观看 | 欧美h| 国产香蕉视频在线播放 | 婷婷综合网 | 九九九久久国产免费 | 久久久久国产一区二区三区 | 国产精品亚洲成在人线 | 麻豆久久久9性大片 | 玩丰满女领导对白露脸hd | 99久久精品免费看国产四区 | 亚洲免费在线观看 | 成人一级视频在线观看 | 国产在线精品一区二区三区 | 激情自拍偷拍 | 色爱综合网 | 伊人精品在线 | 亚洲欧美日韩久久久 | 久久亚洲国产精品日日av夜夜 | 中文精品视频 | 欧美视频成人 | 国产一区不卡 | 国产一区二区激情视频 | 99热这里| 久精品视频| 久久精品欧美一区二区三区不卡 | 国产精品久久久久久久久久久久冷 | av中文在线| 精品国产黄色片 | 国产成人一区二区三区电影 | 国产精品99久久久久久人 | 欧美一区二区在线观看 | 色综合一区二区 | 日韩电影在线 | 一区二区精品视频 | 欧美日韩福利视频 |