java 变量 占用空间_Java对象空间占用如何计算?

要想搞清楚实例对象占用多少空间,首先需要知道Java的数据类型。

Java数据类型分为引用数据类型和基本数据类型。

引用数据类型是由引用变量(refvar)和指向的实际对象两部分组成的。

引用变量是基本数据类型,存放的是引用指向实际对象的内存地址,实际对象存放在堆中。这也解释了为什么说Java方法的参数传递只有值传递了,因为传递的只是把指向对象的内存地址赋值给了方法参数中的局部引用变量,与C++的引用传递并不相同。

9种基本数据类型类型大小boolean1B

byte1B

char2B

short2B

int4B

long8B

float4B

double8B

refvar4B

为什么boolean类型是1B而不是1bit呢?

那是因为计算机最小数据处理单位是字节,所以虽然布尔类型实际只使用1位,但是需要将其他7位补0凑够1字节。

基本概念

在开始计算前,还需要明白一些概念:

对象头

包括两部分:对象标记(哈希码、GC标记、GC词数、同步锁标记、偏向锁持有者),占用8B。

类元信息(类元信息是指向它的类元数据Klass的引用),引用就是占用4B。

对齐填充

由于对象的存储空间分配单位是8个字节,换句话说分配的空间必须是8B的倍数,若只占用12B,也会分配16B。

计算空间占用class Demo {

// +12B 对象头占用

// +1B

byte b;

// +4B 引用

Object obj1;

// +4B 就算引用指向了对象,但是还是只占用引用本身的空间。

Object obj2 = new Object();

// +4B 此处数组也是引用类型,实际数组对象在堆中

double[] d = new double[1000];

}

这样算下来,是25B,根据对齐填充原则,需要分配32B。参考:《码出高效 Java开发手册》

感谢您阅读本文,您的关注、点赞、留言与转发是对我最大的支持!关注我的公众号“语冰Yubing”可接收最新推送,里面也有我分享的一些优质资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值