我們知道計算機以二進制的方式存儲數據,以 64 位虛擬機為例,Java 對象在內存中的存儲形式為:
- 開頭是 8 個字節的 markword,用于標記對象的狀態。(也就是一個 long 型數據的大小。不妨記作對象頭里有一個長長的 markword。)
- 然后是 4 個字節的 class pointer,用于找到自己的類,也就是讓這個對象搞清楚“我是誰”這個深刻的哲學問題。(如果沒有開啟指針壓縮,class pointer 占 8 個字節。)
- 然后是實際數據,也就是這個對象中定義的屬性。
- 最后的字節用于對齊,保證對象大小是 8 個字節的倍數,這樣方便內存管理。
markword除了記錄了鎖的信息,還記錄了內存回收信息和 hashcode 信息。