物件的訪問定位
目前主流的訪問方式有使用控制代碼和直接指標兩種方式。
控制代碼訪問:Java堆中將會劃分出一塊記憶體來作為控制代碼池,reference中儲存的就是物件的控制代碼地址,而控制代碼中包含了物件例項資料與型別資料各自的具體地址資訊。
直接指標訪問:reference中儲存的直接就是物件地址
兩種方式對比:
使用控制代碼來訪問最大的好處就是reference中儲存的就是穩定的控制代碼地址,在物件被移動(垃圾收集時移動物件是非常普遍的行為)時只會改變控制代碼中的例項資料指標,而reference不需要修改。
而使用直接指標訪問方式最大的好處就是速度快,它節省了一次指標定位的時間開銷,由於物件的訪問在Java中非常頻繁,因此這類開銷極少成多後也是一項非常可觀的執行成本。
摘抄自《深入理解Java虛擬機器:JVM高階特性與最佳實踐》(第二版) 周志明著
相關推薦
深入理解JVM之物件訪問定位
當我們建立完成物件之後要使用物件,那麼我們如何找到這個物件呢?這就用到本文所講述的物件訪問定位。 建立物件是為了使用資料,我們的Java程式需要通過棧上的reference資料來操作堆上的具體物件。由於reference型別在Java虛擬機器規範中只規定了一個指向物件的引用
3、物件記憶體佈局 物件訪問定位
物件佈局 * 物件頭 (兩個部分) * 執行時資料:雜湊碼,GC分代年齡,鎖狀態標誌,執行緒持有鎖,偏向執行緒ID,偏向時間戳等 * 型別指標:指向本類。。確定 是那個類的例項。但是查詢(查詢物件的元資料資訊不一定經過物件本身)。 * 如果物
物件記憶體佈局與物件訪問定位
物件記憶體佈局 物件頭 Mark Word (用與儲存物件自身執行時的資料) Mark Word的儲存內容 型別指標(指向類元資料,拓展:在java7中類元資料儲存在方法區('永久代'),java8以元資料區代替) 陣列長度(一般為
「每天五分鐘,玩轉 JVM」:物件訪問定位
### 前言 在「物件記憶體佈局」一節中,我們瞭解到物件頭中包含了一個叫做**型別指標**的東西,即物件指向它的類元資料的指標,虛擬機器通過這個指標來確定這個物件是哪個類的例項。但是,並不是所有的虛擬機器都是這麼去做的。不同的虛擬機器關於這點有不同的實現,目前主流的方式可以分為**控制代碼**和**直接指標
JVM學習--物件的訪問定位
JVM學習–總索引 文章目錄 JVM學習--物件的訪問定位 控制代碼訪問 直接指標訪問 JVM學習–物件的訪問定位 Java建立的物件是放在堆中的,我們是通過棧中的引用去訪問堆中的物件的。 目前虛擬機器有兩種
JVM物件的訪問定位
1 主流的訪問方式有使用控制代碼和直接指標兩種 1使用控制代碼訪問 Java堆中將會劃分出一塊記憶體來作為控制代碼池,reference中儲存的就是物件的控制代碼地址,而控制代碼中包含了物件例項資料與型別資料的具體各自的地址資訊。 2使
jvm 物件的訪問定位,即引用是怎麼定位到記憶體中的物件的
物件的訪問定位有兩種方式: 第一種,引用使用控制代碼訪問物件: 概念:引用儲存的是一個地址,該地址是控制代碼的地址,而控制代碼是一種結構,分別儲存 例項指標和型別指標 這兩種指標,(例項指標是指向堆中的物件例項,而型別指標指向的是在方法區中該物件所屬型別)。當要訪問物件時,先通過引用訪問控制
Java——(JVM)物件的訪問定位
古時候,皇帝選妃,自然是為了臨幸。而建立物件,自然是為了使用物件。 我們的Java程式需要通過棧上的reference資料來操作堆上的具體物件,這是眾所周知的。 但是由於reference型別在Java虛擬機器的規範中只規定了一個指向物件的引用,並沒有定義這個引用該通過何種方式去定位、
讀書筆記《深入理解Java虛擬機器》 (二)物件建立、記憶體佈局、訪問定位
物件的建立 類載入檢查 檢查這個指令的引數是否能在常量池中定位到一個類的引用 檢查這個符號引用代表的類是否已被載入、解析和初始化過, 如果沒有,那必須先執行相應的類載入過程 確定物件所需記憶體的大小 為新生物件分配記憶體 初始化物件的欄位, 大
深入理解Java虛擬機器筆記--物件的記憶體佈局和訪問定位
物件的記憶體佈局 在HotSpot虛擬機器中,物件在記憶體中儲存的佈局可以分為3塊區域:物件頭(Header)、例項資料(Instance Data)和對齊填充(Padding)。 HotSpot虛擬機器物件頭包括兩部分資訊:第一
JVM學習(二)類的載入,物件的建立,記憶體分配及訪問定位
參考資料: 《深入理解java虛擬機器》 https://www.cnblogs.com/chenyangyao/p/5245669.html https://blog.csdn.net/qq_41907991/artic
物件的訪問定位
目前主流的訪問方式有使用控制代碼和直接指標兩種方式。 控制代碼訪問:Java堆中將會劃分出一塊記憶體來作為控制代碼池,reference中儲存的就是物件的控制代碼地址,而控制代碼中包含了物件例項資料與型別資料各自的具體地址資訊。 直接指標訪問:reference中
JVM層次理解物件建立、記憶體佈局及訪問定位
物件的建立 物件的建立,當虛擬機器接收到new指令,會去檢查這個指令的引數是否能在常量池中定位到一個類的符號引用,並且檢查該引用是否已經被載入、解析和初始化過,如果沒有則必須經歷該過程。當類載入檢查通過後,物件建立所需的堆記憶體空間在類載入期間就已經完全確定,接下來在堆中以
JVM:HotSpot物件探祕-建立、記憶體分配、訪問定位
今天來研究一下HotSpot中物件的建立以及記憶體分配、訪問定位。 如何建立物件? 在java語言層面,通過new關鍵字建立物件, 現在要探究的是虛擬機器內建立物件的過程: 1、當遇到new指令時,先根據這個指令的引數去常量池中查詢是否有對應一個類的符號引用。 2、檢查這個符號引用所
JVM三:物件的記憶體佈局與物件的訪問定位
物件的記憶體佈局 下面重點介紹一下MarkWord(32Bit/64Bit中個為欄位的含義)各欄位的意義會隨物件的鎖狀態而發生變化 物件的訪問定位分為兩種方式;直接指標訪問,控制代碼訪問 控制代碼訪問:Java堆中會劃分出一塊記憶體作為控制代碼池,reference中儲存的是物件的
物件建立方法,物件的記憶體分配,物件的訪問定位
物件建立方法: JVM遇到一條new指令時,首先檢查這個指令的引數是否能在常量池中定位到一個類的符號引用,並且檢查這個符號引用代表的類是否已被載入、連線和初始化過。 如果沒有,那必須先執行相應的類的載入過程。 物件的記憶體分配: 物件所需記憶體的大小在類載入完成後便完全確定(物件記憶體佈局),為物件
深入理解JVM學習筆記(十七、物件的訪問定位)
之前我們理解java棧堆時可能會說棧中儲存指標,指向堆中的物件地址。其實這種說法是不嚴謹的,其一是java中沒有指標的概念,其二是棧中不一定儲存物件的地址,也可能是其他地址。那麼問題來了,物件是如何進行訪問定位的呢。 虛擬機器棧是 java方
JVM(2)——HotSpot虛擬機器:物件建立、物件記憶體佈局、物件的訪問定位
物件的建立 步驟1:檢查。虛擬機器遇到一條new指令時,首先將去檢查這個指令的引數是否能在常量池中定位到一個類的符號引用,並且檢查這個符號引用代表的類是否已被載入、解析和初始化過。如果沒有,那必須先執行相應的類載入過程。 步驟2:分記憶體。在類載入檢查通過後
【深入理解JVM】:Java物件的建立、記憶體佈局、訪問定位
物件的建立 一個簡單的建立物件語句Clazz instance = new Clazz();包含的主要過程包括了類載入檢查、物件分配記憶體、併發處理、記憶體空間初始化、物件設定、執行ini方法等。 主要流程如下: 1. 類載入檢查 JVM遇到一條ne
物件的建立、記憶體佈局、物件的訪問定位
前一篇文章我們介紹了Java虛擬機器的執行時資料區域之後,我們大致瞭解了虛擬機器記憶體的概況。接下來,我們將一起學習物件是如何建立、如何佈局 以及如何訪問的。討論這個問題需要限定在具體的虛擬機器和集中在某一個記憶體區域上才有意義。我們這個所說的是Sun的HotSpot虛擬機