Java虛擬機器的直接引用和符號引用
Java類從載入到虛擬機器記憶體中開始,到卸載出記憶體為止,它的整個生命週期包括,載入 ,驗證 , 準備 , 解析 , 初始化 , 解除安裝 ,總共七個階段。其中驗證 ,準備 , 解析 統稱為連線。
而在解析階段會有一個步將常量池當中二進位制資料當中的符號引用轉化為直接引用的過程。
符號引用 :符號引用以一組符號來描述所引用的目標。符號引用可以是任何形式的字面量,只要使用時能無歧義地定位到目標即可,符號引用和虛擬機器的佈局無關。個人理解為:在編譯的時候一個每個java類都會被編譯成一個class檔案,但在編譯的時候虛擬機器並不知道所引用類的地址,所以就用符號引用來代替,而在這個解析階段就是為了把這個符號引用轉化成為真正的地址的階段。
直接引用 :直接引用和虛擬機器的佈局是相關的,不同的虛擬機器對於相同的符號引用所翻譯出來的直接引用一般是不同的。如果有了直接引用,那麼直接引用的目標一定被載入到了記憶體中。
直接引用可以是:
1:直接指向目標的指標。(個人理解為:指向物件,類變數和類方法的指標)
2:相對偏移量。 (指向例項的變數,方法的指標)
3:一個間接定位到物件的控制代碼。
相關推薦
Java虛擬機器OOM問題和四大引用問題簡述
一.請你談談實際的專案中在Java虛擬機器會丟擲哪些異常,每個異常都是怎麼產生的? 1.java.lang.StackOverflowError 棧空間滿了 public static void stackOverFlow(){ // 遞迴呼叫之後,把棧空間塞滿了,當程式出現遞迴呼叫沒有
Java虛擬機器的直接引用和符號引用
Java類從載入到虛擬機器記憶體中開始,到卸載出記憶體為止,它的整個生命週期包括,載入 ,驗證 , 準備 , 解析 , 初始化 , 解除安裝 ,總共七個階段。其中驗證 ,準備 , 解析 統稱為連線。 而在解析階段會有一個步將常量池當中二進位制資料當中的符號引用
JVM中的直接引用和符號引用
JVM在裝載class檔案的時候,會有一步是將符號引用解析為直接引用的過程。 那麼這裡的直接引用到底是什麼呢? 對於指向“型別”【Class物件】、類變數、類方法的直接引用可能是指向方法區的本地指標。 指向例項變數、例項方法的直接引用都是偏移量。例項變數的直接引用可能是
直接引用和符號引用
而解析階段即是虛擬機器將常量池內的符號引用替換為直接引用的過程。 1.符號引用(Symbolic References):符號引用以一組符號來描述所引用的目標,符號可以是任何形式的字面量,只要使用時能夠無歧義的定位到目標即可。例如,在Class檔案中它以CONSTANT_C
JVM——直接引用和符號引用
在JVM中,類從被載入到虛擬機器記憶體中開始,到卸載出記憶體為止, 它的整個生命週期包括:載入、驗證、準備、解析、初始化、使用和解除安裝7個階段。 而解析階段即是虛擬機器將常量池內的符號引用替換為直接引
JAVA 虛擬機器 GC演算法和GC回收器
本章內容 標記-清除演算法 複製演算法 標記-整理演算法 分代收集演算法 七種垃圾收集器 標記-清除演算法 標記;遍歷所有的GC Roots,然後將所有GC Roots可達的物件標記為存活的物件 清除:清除的過程將遍歷堆中所有的物件,將沒有標記的物件全部清除
JAVA虛擬機器:新生代和老年代GC
Java堆可以分為新生代和老年代兩個區,其中新生代又可以分為一個Eden區和兩個Survivor區,兩個Survivor區分別被命名為From和To以示區分,新生代和老年代的比例為1:2,它們共同組成
Java虛擬機器解釋執行和JIT的關係
Java程式最初是僅僅通過直譯器解釋執行的,即對位元組碼逐條解釋執行,這種方式的執行速度相對會比較慢,尤其當某個方法或程式碼塊執行的特別頻繁時,這種方式的執行效率就顯得很低。於是後來在虛擬機器中引入
個人理解 java虛擬機器中的符號引用和直接引用
在java中,一個java類將會編譯成一個class檔案。在編譯時,java類並不知道引用類的實際記憶體地址,因此只能使用符號引用來代替。比如org.simple.People類引用org
java虛擬機器中的符號引用和直接引用
在java中,一個java類將會編譯成一個class檔案。在編譯時,java類並不知道引用類的實際記憶體地址,因此只能使用符號引用來代替。比如org.simple.People類引用org.simple.Tool類,在編譯時People類並不知道Tool類的實際記憶體地址,因此只能使用符號org.simple
Java字面量(Java直接量)和符號引用
1、Java字面量(Java直接量) int i = 1;把整數1賦值給int型變數i,整數1就是Java字面量, 同樣,String s = "abc";中的abc也是字面量。 資料型別 直接量描述 舉例 int 整數直接量(可用二、十、八
深入了解java虛擬機---類加載機制主動引用和被動引用
沒有 put log 完成 開始 檢查 觸發 清單 場景 當類被編譯為.class文件後,如何在jvm中被加載的呢 總共七個步驟:加載,驗證,準備,解析,初始化,使用,卸載。其中加載,驗證,準備,初始化,卸載都必須按照順序來。解析可以在初始化後再開始。使用就可有可無了
Java虛擬機器判斷物件存活的兩種方案:引用計數法與可達性分析演算法
java堆和方法區主要存放各種型別的物件(方法區中也儲存一些靜態變數和全域性常量等資訊),那麼我們在使用GC對其進行回收的時候首先要考慮的就是如何判斷一個物件是否應該被回收。也就是要判斷一個物件是否還有其他的引用或關聯使得這個物件處於存活的狀態。我們需要將不在存活狀態的所有物
℃江的觀後感 -- Java 虛擬機器的方法區、直接記憶體和執行時常量池
方法區 我們知道方法區,當然是和方法有關,Java虛擬機器的作用就兩個,儲存、運算。其實我們叫其方法區,說明和儲存東西有關,但是存什麼呢?這塊儲存的是虛擬機器載入的類資訊,常亮,靜態變數和有個就是即使編譯後的程式碼等資料。方法區一般在hotspot被稱為永久代
深入理解JAVA虛擬機器——JVM的資料型別(以及按引用傳遞法則)
Java虛擬機器是通過某些資料型別來執行計算的,資料型別可以分為兩種:基本型別和引用型別,基本型別的變數持有原始值,而引用型別的變數持有引用值。 Java語言中的所有基本型別同樣也都是Java虛擬
Java物件與JVM(三) Java物件在Java虛擬機器中的引用訪問方式
Java物件與JVM(三) Java物件在Java虛擬機器中的引用訪問方式 在前面兩篇文章中瞭解到Java物件例項是如何在HotSpot虛擬機器的Java堆中建立的,以及建立後的記憶體佈局是怎樣的。 下面我們詳細瞭解在Java堆中的Java物件是如何訪
Java中的強引用和弱引用
style 關系 term handle ren soft obj jsb false 旭日Follow_24 的CSDN 博客 ,全文地址請點擊: https://blog.csdn.net/xuri24/article/details/81114944 一、強引用
Java基礎篇 - 強引用、弱引用、軟引用和虛引用
splay 查看 tla 之前 for 應用 幹貨 程序 策略 前言 Java執行GC判斷對象是否存活有兩種方式其中一種是引用計數。 引用計數:Java堆中每一個對象都有一個引用計數屬性,引用每新增1次計數加1,引用每釋放1次計數減1。 在JDK 1.2以前的版本中,若
Java中的值傳遞和"引用"傳遞
引言 學習過C語言的同學都很清楚在c中呼叫方法的引數有值傳遞和引用傳遞兩種方式。關於值傳遞和引用傳遞網上有許多的部落格寫的很好,這裡我就不解釋了。附上一篇:值傳遞和引用傳遞。但是使用過Java的同學可能知道,如果我們按照C語言的引數傳遞方式來理解Java中引數傳遞的話,有時候可能會和自己預料的答案有所出入。
Java虛擬機器(Jvm原始碼):Mac安裝JProfiler和IDE整合
首先介紹一下JProfiler JProfiler是一個專業工具,用於分析正在執行的JVM中發生的事情。當您的生產系統遇到問題時,您可以將其用於開發,質量保證和消防任務。 當然這個軟體是需要收費的,這個需要你自行衡量下。 我的建議是有能力,財力雄厚就買正版,或者使用其他免費的Ja