国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

如何計算Java對象占用了多少空間?

2019-11-26 14:41:29
字體:
來源:轉載
供稿:網友

本文介紹了計算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對象占用了多少空間的方法,希望對大家學習java程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌鲁木齐市| 贡觉县| 平陆县| 集贤县| 娱乐| 安图县| 襄汾县| 东安县| 固始县| 嘉善县| 大同市| 禄丰县| 湖北省| 蒙山县| 兴化市| 榆中县| 莒南县| 大港区| 施甸县| 江都市| 三穗县| 乡宁县| 庄河市| 屏南县| 江油市| 松桃| 嘉定区| 南乐县| 丁青县| 德江县| 宁陕县| 南昌县| 滨海县| 玉田县| 遵义县| 孟村| 古丈县| 吕梁市| 栾川县| 保定市| 梧州市|