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的倍数。