91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

發布時間:2021-08-13 13:58:51 來源:億速云 閱讀:158 作者:Leah 欄目:編程語言

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

對象頭

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

  1. 對象的HashCode,鎖信息等

  2. 到對象類型數據的指針

  3. 數組的長度(如果是數組的話)

規則

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

public class Test {     byte a;     int b;     boolean c;     long d;     Object e; }

如果這個對象的屬性按照順序存放的話,要占用的空間為: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。可以看到節省了不少空間。

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

class A {     long a;     int b;     int c; } class B extends A {     long d; }

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

class A {     byte a; } class B extends A {     byte b; }

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

class A {     byte a; } class B extends A {     long b;     short c;     byte d; }

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

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

向AI問一下細節

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

AI

二连浩特市| 鱼台县| 隆昌县| 广河县| 新竹县| 青川县| 太康县| 遂川县| 偏关县| 临漳县| 奇台县| 阳朔县| 溧阳市| 文安县| 莱州市| 昭苏县| 广平县| 逊克县| 南部县| 策勒县| 松原市| 青阳县| 萨嘎县| 东阳市| 晋江市| 无棣县| 福安市| 将乐县| 东海县| 阿克苏市| 蒙自县| 仪陇县| 临汾市| 清徐县| 邛崃市| 泰来县| 来宾市| 关岭| 怀远县| 泸水县| 隆化县|