Java: 对象的大小怎么算

用这个包计算对象的大小:

可以看到这个integer包装类是16字节。

int是值类型,占用的大小是4字节。

为什么Integer是16字节。

涉及对象的计算方法。因为Integer是一个对象。

其中标记包括主要是看作为一把锁是不是被别人占用了、对象的hashcode、对象的年龄(年龄超过6就为老年代(GC年龄))

如果是数组还会有一个标记对象数组长度的占用4字节。

所以数组的最大的大小是int的最大值。

回到为什么Integer是16字节的问题:

int值有地址所以占用4字节,标记战8字节,这里的int不是数组所以不用再加4.

现在是4+8=12.

看完头,还有内容没有算:

进入对象查看内容,查找不是static的,【static不是属于对象的】,方法存在方法区也不占用对象的大小:

经过查找就只有这个是对象内容部分,int 值类型占4字节,加上前面的头占12字节。

所以一共是12+4=16字节。所以打印出16.

同样的方法分析其他类的对象的大小。

注意,如果上面找到的对象内容不止一个,假设找到2个,就是2*4=8字节,加上头大小12字节共为20字节,

但是实际结果是24.

因为java中是按8个字节对齐对象的,所以任何一个对象的大小都应该是8的倍数。

发布了307 篇原创文章 · 获赞 45 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_39969226/article/details/104172213