以64位作業系統來說
1.物件頭:mark word + 型別指標
mark word佔8位元組,其中主要儲存自身執行時的資訊,比如hashcode,gc分代年齡,鎖的資訊,synchronized的實現就和這裡息息相關。
型別指標佔4位元組,通常64位作業系統的型別指標長度為64bit,既8位元組。由於jvm的usecompressedclasspoint引數(類指標壓縮)預設為開啟,因此實際占有4位元組。
2.例項資料:
這部分占有的記憶體大小,就是根據成員變數的資料型別所占有的大小決定,例如byte short int long,float double char boolean,占有1248 4821位元組。
3.對齊位:
一般64位的作業系統,在讀資料時喜歡8位元組一起讀,因此這部分是為了讓物件記憶體大小湊齊8的倍數,方便一起讀取。例如object的例項物件,物件頭佔8+4=12位元組,成員變數0位元組,加起來未12位元組,為了讓整體占用記憶體為8的倍數(16位元組),則對齊位占用4位元組既可。
程式在記憶體中的布局
c語言程式在記憶體中的分布 段 text 存放著程式的機器碼和唯讀資料 常量 全域性區 靜態區 由編譯器編譯時分配,程式執行結束後釋放 屬於靜態記憶體分配 在程式的二進位制檔案中,bss段不佔儲存空間,只有在載入到記憶體中才分配 data段 存放已初始化的靜態變數 static 修飾 和全域性變數 ...
jvm 物件在記憶體中儲存的布局
jvm 物件在記憶體中儲存的布局有三部分 物件頭 例項資料 對齊填充。1 物件頭 執行時資料 型別指標 陣列長度。1 執行時資料 hashcode雜湊碼 鎖狀態標誌 執行緒持有的鎖 gc年齡分代等,有些不是固定不變的,在執行時會根據當時的狀態進行修改。2 型別指標 指向方法區中型別資訊的指標。型別資...
linux 程序在記憶體中的布局
先從 linux平台下 虛擬記憶體管理說起,寫c程式時,我們經常會列印乙個指標位址,說這個指標指向某某記憶體位址.可這些位址是真實物理記憶體位址嗎?不是 這些只是虛擬記憶體位址.當乙個c程式調入記憶體開始執行後,在記憶體中就會產生乙個程序.而在多工作業系統中每個程序都擁有一片屬於自己的記憶體空間 記...