public class Student { private long id; private long userId; private byte state; private long createMillis; }
這是一個普通的java類,包含幾個簡單的字段,那么這個類生成一個對象占用多大的內存呢?
通常,說占40個字節就可以了。這是怎么算出來的呢?
1:拆分對象 對象頭 對象數據 對象填充
2:分別計算
2.1:對象頭 占12字節
對象頭包含兩個部分 :標記字 ,占用一個機器字,8字節; 類型指針,占一個機器字,8字節
特別說明:1:如果堆內存小于32GB,JVM會默認開啟指針壓縮,壓縮后的指針占4個字節
2:如果是數組,對象頭中還會多出一個 “數組長度”,int類型,占4字節。
2.2:對象數據 占 25字節
三個long數據 8*3=24字節,一個byte 1字節
2.3:對象填充
已經計算完的 合計 是37字節。那么填充多少字節?
java對象大小默認按8字節對齊,也就是是8的整數倍,那么需要填充3字節。
3:合計 12+25+3=40字節。
找到那個感覺 就算打開了那個腦洞
本文來自博客園,作者:寫程序到老,轉載請注明原文鏈接:http://www.rzrgm.cn/angin-iit/p/16426056.html
浙公網安備 33010602011771號