- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- Java中怎么計算對象占用空間
這篇文章給大家介紹Java中怎么計算對象占用空間,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
對象頭
對象的頭部至少有兩個(gè)WORD,如果是數組的話(huà),那么三個(gè)WORD,內容如下:
對象的HashCode,鎖信息等到對象類(lèi)型數據的指針數組的長(cháng)度(如果是數組的話(huà))
規則
首先,任何對象都是8字節對齊,屬性按照[long,double]、[int,float]、[char,short]、[byte,boolean]、reference的順序存放,舉個(gè)例子:
publicclassTest{
bytea;
intb;
booleanc;
longd;
Objecte;
}
如果這個(gè)對象的屬性按照順序存放的話(huà),要占用的空間為:head(8)+a(1)+padding(3)+b(4)+c(1)+padding(7)+d(8)+e(4)+padding(4)=40。但是按照這個(gè)規則得到:head(8)+d(8)+b(4)+a(1)+c(1)+padding(2)+e(4)+padding(4)=32??梢钥吹焦澥×瞬簧倏臻g。
在涉及繼承關(guān)系的時(shí)候有一個(gè)最基本的規則:首先存放父類(lèi)中的成員,接著(zhù)才是子類(lèi)中的成員,舉個(gè)例子:
classA{
longa;
intb;
intc;
}
classBextendsA{
longd;
}
這樣存放的順序及占用空間如下:head(8)+a(8)+b(4)+c(4)+d(8)=32。那如果父類(lèi)中的屬性不夠八個(gè)字節怎么辦?這樣就有了新的一條規則:父類(lèi)中最后一個(gè)成員與子類(lèi)的第一個(gè)成員的間隔如果不夠4個(gè)字節,此時(shí)需要擴展到4個(gè)字節的基本單位,舉個(gè)例子:
classA{
bytea;
}
classBextendsA{
byteb;
}
那么此時(shí)占用的空間如下:head(8)+a(1)+padding(3)+b(1)+padding(3)=16。顯然這種方式比較浪費空間,那么就有了:如果子類(lèi)的第一個(gè)成員是double或者long,并且父類(lèi)并沒(méi)有用完8個(gè)字節,JVM會(huì )破壞規將較小的數據填充到該空間,舉個(gè)例子:
classA{
bytea;
}
classBextendsA{
longb;
shortc;
byted;
}
此時(shí)占用的空間如下:head(8)+a(1)+padding(3)+c(2)+d(1)+padding(1)+b(8)=24。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站