龙空技术网

java对象大小

Spring全家桶实战案例 119

前言:

而今我们对“java对象的大小”大概比较关心,同学们都需要学习一些“java对象的大小”的相关知识。那么小编也在网摘上搜集了一些有关“java对象的大小””的相关内容,希望大家能喜欢,姐妹们快快来学习一下吧!

一个对象到底占用多少字节,该如何计算?

首页要借助openjdk 的jol工具

pom.xml中加入:

<dependency>			<groupId>org.openjdk.jol</groupId>			<artifactId>jol-core</artifactId>			<version>0.10</version>		</dependency>

java对象都是8字节对齐的,不足的需要补齐 也就是始终是8的倍数

简单说先对象的组成:对象头+实例数据+(padding补齐)

对象头的组成:mark word + klass + (数组长度) ;如果是数组类型 才有数组长度的。

mark word = 8个字节

klass = 4个字节

这里输出 可以观察到所有的基本数据类型似乎是排序了从大到小排列,然后我们通过SIZE这一列开始算每8字节为一组,在OFFSET=24的位置由于是boolean占一个字节,OFFSET=28占4个字节,那就是差了8- 1 - 4 = 3个字节,那这里就进行补齐3个字节,继续向下OFFSET=32 占4个字节,那还差8-4=4个字节 需要补齐4个字节

所以总的结果=40 bytes。

如果是数组如下:

char[] cs = new char[36] ;		System.out.println(ClassLayout.parseInstance(cs).toPrintable()) ;结果:[C object internals: OFFSET  SIZE   TYPE DESCRIPTION                               VALUE      0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)      4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)      8     4        (object header)                           41 00 00 20 (01000001 00000000 00000000 00100000) (536870977)     12     4        (object header)                           24 00 00 00 (00100100 00000000 00000000 00000000) (36)     16    72   char [C.<elements>                             N/AInstance size: 88 bytesSpace losses: 0 bytes internal + 0 bytes external = 0 bytes total

这里char是占2个字节,长度是36,那这里是需要算上的。

标签: #java对象的大小