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

如何理解符號引用和直接引用?

開發 前端
在【解析】步驟中,其實是將以字符串形式存在的,描述了類、接口、字段或方法的名稱,以及可能包含的其他關于被引用項的信息,轉換成實際內存對象的過程。

我們知道在 JVM 中類加載總共使用 5 步組成的,而類的生命周期總共有 7 個階段,如下圖所示:

其中每步的含義如下:

1.加載

加載(Loading)階段是整個“類加載”(Class Loading)過程中的一個階段,它和類加載 Class Loading 是不同的,一個是加載 Loading 另一個是類加載 Class Loading,所以不要把二者搞混了。

在加載 Loading 階段,Java 虛擬機需要完成以下 3 件事:

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

2.驗證

驗證是連接階段的第一步,這一階段的目的是確保 Class 文件的字節流中包含的信息符合《Java 虛擬機規范》的全部約束要求,保證這些信 息被當作代碼運行后不會危害虛擬機自身的安全。

驗證選項:

  • 文件格式驗證
  • 字節碼驗證
  • 符號引用驗證...

3.準備

準備階段是正式為類中定義的變量(即靜態變量,被 static 修飾的變量)分配內存并設置類變量初始值的階段。

比如此時有這樣一行代碼:

public static int value = 123;

它是初始化 value 的 int 值為 0,而非 123。

4.解析

解析階段是 Java 虛擬機將常量池內的符號引用替換為直接引用的過程,也就是初始化常量的過程。

也就是說這個階段會涉及到以下三個概念:

  • 符號引用:類文件中的一種抽象引用方式,它并不涉及具體的內存地址或對象實例。符號引用包括了三個方面的信息:類和接口的全限定名、字段的名稱和描述符、方法的名稱和描述符。這些信息足夠唯一地確定一個類、字段或者方法,但在類被加載到 JVM 之前,并沒有與實際的內存布局關聯。
  • 直接引用:一種可以直接指向目標對象、類、字段或者方法在 JVM 內存中的物理位置的引用方式,例如指針、偏移量等。一旦有了直接引用,就可以直接訪問目標實體,而無需再經過其他查找過程。
  • 替換過程:當 JVM 在解析階段需要對某個符號引用進行解析時,會根據類加載的結果生成對應的直接引用。比如,當一個類引用了另一個類的方法或字段時,解析階段會確保被引用的目標類已經被加載,并計算出被引用方法或字段在內存中的準確位置,然后用這個位置信息替換掉原來的符號引用。

5.初始化

初始化階段,Java 虛擬機真正開始執行類中編寫的 Java 程序代碼,將主導權移交給應用程序。初始化階段就是執行類構造器方法的過程,當然初始化階段也會執行靜態初始化塊和靜態字段的初始化賦值的操作。

那么問題來了,以上步驟中在進行【解析】階段時有兩個比較難理解的定義【直接引用】和【符號引用】,那么如何通俗易懂的理解二者的概念呢?

符號引用 VS 直接引用

這里通俗易懂的理解一下符號引用和直接引用

  • 符號引用:想象一下你去圖書館找一本書,但你沒有具體的書架位置,只有書名和作者,這是書名和作者就像是符號引用,你并不知道它在圖書館的哪個位置?你只知道書名和作者信息。
  • 直接引用:之后你去了借閱臺或者目錄索引處查找這本書的具體位置,比如在第 3 層的 A 區 12 排 5 列,你可以直接走到這個位置找到書。這個具體的位置信息就像直接引用,它是一個可以直接定位到實體的指針或句柄。

也就是在【解析】步驟中,其實是將以字符串形式存在的,描述了類、接口、字段或方法的名稱,以及可能包含的其他關于被引用項的信息,轉換成實際內存對象的過程。直接引用是實際的內存地址或偏移量,使用它可以讓 JVM 能夠快速地訪問對象、方法或字段。

責任編輯:姜華 來源: 磊哥和Java
相關推薦

2010-07-20 13:53:44

Perl引用

2010-07-13 16:40:41

Perl引用

2024-04-26 00:31:24

Java動態鏈接

2009-08-19 16:39:44

C#值類型C#引用類型

2017-03-20 19:18:00

Android符號引用

2020-04-27 10:40:23

SQLGROUP BYMySQL

2024-05-20 08:58:13

Java引用類型垃圾回收器

2010-07-16 13:45:41

Perl引用

2020-12-02 09:01:40

Java基礎

2015-11-02 17:20:00

Java弱引用

2009-06-11 10:25:36

Java GC幽靈引用

2016-04-13 11:05:02

C++引用匿名對象

2018-11-16 16:10:28

JavaOOM編程語言

2013-09-16 16:48:50

Android優化軟引用

2012-02-13 10:18:42

C++ 11

2013-08-19 17:14:04

.Net強引用弱引用

2021-10-18 15:50:49

Android強引用軟引用

2009-11-25 09:23:47

PHP引用&符號

2009-08-27 16:39:26

C# String類型

2022-03-08 13:06:25

引用隊列jvm變量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品久久久一区二区 | 国产欧美日韩一区二区三区在线 | 天堂综合网久久 | 亚洲精品二区 | 国产九九九 | 久久久久久久久久久久久久久久久久久久 | 91精品www | 久久久久一区二区 | 日韩电影免费在线观看中文字幕 | 欧美人人 | 91一区二区 | www.亚洲.com | 天天射夜夜操 | 亚洲九九色| 日本黄色大片免费 | 男人天堂999 | 夜夜草天天草 | 日韩在线不卡视频 | 五月激情综合网 | 99pao成人国产永久免费视频 | 精品福利在线 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 成年人黄色一级片 | 亚洲一区欧美 | 亚洲综合一区二区三区 | 国产精品久久9 | 日韩国产高清在线观看 | 99久久视频 | 亚洲精品一区二区三区四区高清 | 日韩在线观看一区 | 丝袜美腿一区二区三区 | 最新中文字幕在线 | 久久精品国产一区 | 久久精品一区二区三区四区 | 久久成人免费 | 中文日本在线 | 日韩美女在线看免费观看 | 亚洲精品一二区 | 精品美女在线观看视频在线观看 | 国产精品久久在线 | 小早川怜子xxxxaⅴ在线 |