java基礎教學專欄介紹JVM建立物件及存取定位的過程
#相關免費學習推薦:java基礎教學
1、物件的建立
- 虛擬機器接收到new指令時,檢查這個指令能否在常數池中定位到一個類別的符號引用,並且檢查這個符號引用代表的類別是否已被載入、解析和初始化。如果都沒有,先執行類別載入過程。
- 在類別載入通過後,虛擬機器為新物件分配記憶體(把一塊確定大小的記憶體從Java堆中劃分出來),記憶體大小在類別載入完成後即可完全確定。
- 兩種分配方式:
- (1):指標碰撞:假設Java堆中記憶體是絕對規則的,即使用過的內存在一邊,空閒的內部存在另外一邊,中間放著一個指針作為指示器,透過移動指針實現記憶體分配。
- (2):空閒列表:如果Java堆中的記憶體並不是規則的,即已使用的記憶體和空閒的記憶體相互交錯,虛擬機就必須維護一個列表,記錄哪些記憶體區塊是可用的,透過從列表中尋找空間劃分給物件實例來分配記憶體。
- Java堆疊是否規則地由所採用的垃圾收集器是否有壓縮整理功能決定。
- 在虛擬機器中創建物件不是線程安全的行為,可能出現在給物件A分配內存,指針還來不及修改,而物件B又使用了原來的指針來分配內存。有兩種解決方案:
- (1):對分配記憶體空間的動作進行同步處理,實際上虛擬機器採用CAS配上失敗重試的方式保證更新操作的原子性;
- (2):把記憶體分配的動作按照線程劃分在不同的空間中進行,即每個線程在Java堆中預先分配一小塊內存,稱為本地線程分配緩衝(Thread Loal Allocation Buffer,TLAB) 。
- 記憶體分配完成後,需要將分配到的記憶體空間都初始化為零值,保證物件的實例欄位在Java程式碼中可以不賦初始值就可以直接使用,程式能存取這些欄位的資料類型對應的零值。
- 設定對象,把對像是哪個類的實例,如何才能找到類別的元資料訊息,對象的哈希碼,對象的GC分代年齡等存放在對象頭。
2. 物件的記憶體佈局:物件在記憶體中儲存的佈局可以分為3塊:物件頭(Header)、實例資料(Instance Data)、對齊填充(Padding)。物件頭,包括兩部分資訊:
(1):儲存物件本身的運行時數據,如雜湊碼、GC分代年齡、鎖定狀態標誌、執行緒持有的鎖、偏向線程ID、偏向時間戳記等,這部分資料的長度在32位元和64位元的虛擬機器中分別為32bit和64bit,官方稱為Mark Word(非固定的資料結構,根據物件的狀態復用自己的存儲空間)。
(2):類型指針,也就是指向物件的類別元資料的指針,虛擬機器透過這個指針來決定這個物件是哪個類別的實例。
- 實例資料:物件真正儲存的有效訊息,即程式碼中所定義的各種類型的欄位內容。無論是從父類別繼承下來的,或是子類別自己定義的,都需要記錄。
- 對齊填充:不是必然存在,起著佔位符的作用,由於HotSpot VM要求對象的大小必須是8字節的整數倍,而對象頭部分正好是8字節的整數倍,因此當實例資料沒有對齊時,透過對齊填充來補全。
3. 物件的存取定位:Java透過堆疊上的reference資料(局部變數表中的物件參考)來操作堆疊上的具體對象,reference只規定了指向物件的引用,沒有定義怎麼去定位,訪問堆中的物件的位置。對象訪問方式由迅疾實現。
(1):句柄存取:Java堆會分割出一塊記憶體作為句柄池,reference儲存的就是物件的句柄位址,句柄包含了物件實例資料和類型資料各自的位址資訊。
優勢:reference中儲存的是穩定的句柄位址,物件移動時只會改變句柄中的實例資料指針,不改變reference。
(2):直接指標:reference中儲存的直接就是物件位址,Java堆中放置存取物件類型資料(存放在方法區)的位址。
優勢:速度更快,節省了一次指標定位的時間開銷,HotSpot是使用直接指標存取。
以上是詳解JVM建立物件及存取定位過程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版