Java一个对象所占字节数计算方法

Java中一个对象所占用的字节数为8的整数倍。

Java对象包含四个部分:

A:对象头,占用很少的字节,表述Object当前状态的信息

B:基本类型域占用的空间(原生域指 int、boolean、short等)

C:引用类型域占用的空间(引用类型域指 其他对象的引用,每个引用占用4个字节)

D:填充物占用的空间(后面说明什么是填充物)

A.对象头:包含一个对象的元数据信息,描述这个对象的状态,ID,实例名字,数组长度等。。

内存中,每个对象占用的总空间不仅包含对象内声明的变量所需要的空间,还包括一些额外信息,比如:对象头 和 填充物。“对象头”的作用是用来记录一个对象的实例名字、ID 和 实例状态(例如,当前实例是否“可到达”,或者当前锁的状态等等)。

在当前的JVM版本中(Hotspot),“对象头”占用的字节数如下:

一个普通对象,占用8 bytes

数组,占用 12 bytes,包含普通对象的 8 bytes + 4 bytes(数组长度)

B:基本类型:包含这个对象的基本类型数据空间

boolean、byte 占用 1 byte,char、short 占用 2 bytes,int、float 占用 4 bytes,long、double 占用 8 bytes

C:引用类型:包含一些引用类型或方法所占用的空间

每个引用类型占用 4 bytes

D:填充物:由于对象所占用的数据大小为8的整数倍,有时前三者占用空间大小总和不是8整数倍,需要填充几个字节使其为8的整数倍。

在Hotspot中,每个对象占用的总空间是以8的倍数计算的,对象占用总空间(对象头+声明变量)不足8的倍数时候,自动补齐。而,这些被填充的空间,我们可以称它为“填充物”。

发布了9 篇原创文章 · 获赞 2 · 访问量 967

猜你喜欢

转载自blog.csdn.net/qq_34072169/article/details/103979595