虚拟机:Java HotSpot(TM) 64-Bit Server VM (25.221-b11, mixed mode)

对象的内存以字节为单位,且必须是8的倍数,它的构成由3部分组成:对象头+实例数据+对齐内存。对象头由2个部分组成:_mark(8字节)+oop指针。

oop指针和引用对象在开启压缩普通对象指针(-XX:+UseCompressedOops)时大小为4字节,关闭压缩普通对象指针(-XX:+UseCompressedOops)时为8字节。UseCompressedOops默认是开启的,只有虚拟机内存达到32G以上,4个字节已经无法满足寻址需求时,才需要关闭该参数。

普通基本对象大小为:

对象类型

字节

boolean

1

byte

1

short

2

char

2

int

4

float

4

long

8

double

8

例1:

public classPersion {intid;

}

开启压缩普通对象指针时,对象大小:(8+4)+4=16字节,是8的倍数,补齐0字节最终大小为16字节

关闭压缩普通对象指针时,对象大小:(8+8)+4=20字节,不是8的倍数,补齐4字节最终大小为24字节

f48ded8937134337c1fd4defd74d68c7.png

例2:

public classPersion {intid;

String name;intage;

Date birthday;

}

开启压缩普通对象指针时,对象大小:(8+4)+(4+4+4+4)=28字节,是8的倍数,补充0字节最终大小为32字节

de23ce073bf4537ebd9547e9735bf8d5.png

关闭压缩普通对象指针时,对象大小:(8+8)+(4+8+4+8)=40字节,是8的倍数,补充0字节最终大小为40字节

b2b566cc0fa7e06c9d99c6b06cfc806f.png

例3:

public classPersion {intid;

String name;intage;

Date birthday;booleanschool;

}public class Student extendsPersion {intb;

}

开启压缩普通对象指针时:

Person对象的大小为:(12+4)+(4+4+4+4+1)=29字节,补齐3字节,最终大小为32字节

Student对象的大小为:(12+4)+(17+7)+4=40字节,补齐0字节,最终大小为40字节。

c9e2c7003d2d0888ad01fc1408a61fd1.png

关闭压缩普通对象指针时:

Person对象的大小为:16+(4+8+4+8+1)=41字节,补齐7字节,最终大小为48字节

Student对象的大小为:16+(25+7)+4=52字节,补齐4字节,最终大小为56字节。

acb830ce3741354579da9965bdbd914c.png

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐