给定一个具体的类,请分析对象的内存占用?
Java


官方 推荐
1 public class MyOrder{
2     private long orderId;
3     private long userId;
4     private byte state;
5     private long createMillis;
6 } 

一般来说,MyOrder 类的每个对象会占用40个字节。 


怎么计算出来的?

计算方式为:

对象头占用12字节。

每个long类型的字段占用8字节,3个long字段占用24字节。

byte 字段占用1个字节。

以上合计 37字节,加上以8字节对齐,则实际占用40个字节。


对象头中包含哪些部分?

对象头中一般包含两个部分:

标记字,占用一个机器字,也就是8字节。

类型指针,占用一个机器字,也就是8个字节。

如果堆内存小于32GB,JVM默认会开启指针压缩,则只占用4个字节。

所以前面的计算中,对象头占用12字节。

如果是数组,对象头中还会多出一个部分:

数组长度, int值,占用4字节。