在hotspot虛擬機器中,物件在記憶體中儲存的布局可以分為3塊區域:物件頭(header)、例項資料(instance data)和對齊填充(padding)。下圖是普通物件例項與陣列物件例項的資料結構:
hotspot虛擬機器的物件頭包括兩部分資訊:
markword
第一部分markword,用於儲存物件自身的執行時資料,如雜湊碼(hashcode)、gc分代年齡、鎖狀態標誌、執行緒持有的鎖、偏向執行緒id、偏向時間戳等,這部分資料的長度在32位和64位的虛擬機器(未開啟壓縮指標)中分別為32bit和64bit,官方稱它為「markword」。
klass
物件頭的另外一部分是klass型別指標,即物件指向它的類元資料的指標,虛擬機器通過這個指標來確定這個物件是哪個類的例項.
陣列長度(只有陣列物件有)
如果物件是乙個陣列, 那在物件頭中還必須有一塊資料用於記錄陣列長度.
Java 物件和物件引用
為了接下來進行更好的分析,我先建立乙個demo類,用於後面的分析。public class demo 接下來,我們用demo類來建立乙個物件。demo demo newdemo 這一條語句,其實包括了四個動作 1 右邊的 new demo 是以demo類為模板,在堆空間裡建立乙個demo物件。2 末...
Java物件導向 類,物件
oop,object oriented programming,物件導向程式設計 面向過程 以功能行為為主體的思想體現。物件導向 以執行功能的物件為主體的思想體現。物件導向特徵 封裝 隱藏內部實現,穩定外部介面。繼承 子類繼承父類成員,實現 復用。多型 不同子類對同一訊息作出不同的反映。具有相同屬性...
Java物件導向 物件陣列
儲存一組物件的陣列。當需要儲存一組型別一致的一組物件時候,採用物件陣列儲存 其好處是,用乙個變數管理一組資料。使用物件陣列 類型別 變數 new 類型別 長度 類型別 變數 new 類型別 物件陣列元素的預設值是 null 案例 string arr newstring 5 宣告了長度為5的字串陣列...