亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么計算對象占用空間

發布時間:2021-07-24 17:07:36 來源:億速云 閱讀:148 作者:Leah 欄目:編程語言

這篇文章給大家介紹Java中怎么計算對象占用空間,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

  對象頭

  對象的頭部至少有兩個WORD,如果是數組的話,那么三個WORD,內容如下:

  對象的HashCode,鎖信息等到對象類型數據的指針數組的長度(如果是數組的話)

  規則

  首先,任何對象都是8字節對齊,屬性按照[long,double]、[int,float]、[char,short]、[byte,boolean]、reference的順序存放,舉個例子:

  publicclassTest{

  bytea;

  intb;

  booleanc;

  longd;

  Objecte;

  }

  如果這個對象的屬性按照順序存放的話,要占用的空間為:head(8)+a(1)+padding(3)+b(4)+c(1)+padding(7)+d(8)+e(4)+padding(4)=40。但是按照這個規則得到:head(8)+d(8)+b(4)+a(1)+c(1)+padding(2)+e(4)+padding(4)=32。可以看到節省了不少空間。

  在涉及繼承關系的時候有一個最基本的規則:首先存放父類中的成員,接著才是子類中的成員,舉個例子:

  classA{

  longa;

  intb;

  intc;

  }

  classBextendsA{

  longd;

  }

  這樣存放的順序及占用空間如下:head(8)+a(8)+b(4)+c(4)+d(8)=32。那如果父類中的屬性不夠八個字節怎么辦?這樣就有了新的一條規則:父類中最后一個成員與子類的第一個成員的間隔如果不夠4個字節,此時需要擴展到4個字節的基本單位,舉個例子:

  classA{

  bytea;

  }

  classBextendsA{

  byteb;

  }

  那么此時占用的空間如下:head(8)+a(1)+padding(3)+b(1)+padding(3)=16。顯然這種方式比較浪費空間,那么就有了:如果子類的第一個成員是double或者long,并且父類并沒有用完8個字節,JVM會破壞規將較小的數據填充到該空間,舉個例子:

  classA{

  bytea;

  }

  classBextendsA{

  longb;

  shortc;

  byted;

  }

  此時占用的空間如下:head(8)+a(1)+padding(3)+c(2)+d(1)+padding(1)+b(8)=24。

關于Java中怎么計算對象占用空間就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰宁| 奉贤区| 长岛县| 莒南县| 唐河县| 庆城县| 石家庄市| 明光市| 侯马市| 友谊县| 嘉义县| 天柱县| 潢川县| 桃园县| 汕尾市| 兴化市| 景洪市| 邢台县| 罗山县| 泽普县| 娱乐| 蚌埠市| 泰安市| 江津市| 永清县| 吉安县| 东方市| 右玉县| 商都县| 交城县| 萝北县| 乌鲁木齐县| 来宾市| 宜阳县| 建昌县| 兴和县| 皮山县| 新龙县| 平和县| 五峰| 神农架林区|