java对象头

java对象头

java由三部分组成:

  1. 对象头(标记字+类指针) 大小固定 (非数组类型)64位虚拟机对象头位12byte(标记字8字节) 32位虚拟机对象头位8byte
  2. 实例数据 (如:int型4byte)
  3. 数据对齐(填充数据)对象头+示例数据 = n*8 byte 不足的就用填充数据

标记字记录的信息:1.锁信息 2.gc信息 3.hashcode

使用jol包证明:

<dependency>
    <groupId>org.openjdk.jol</groupId>
    <artifactId>jol-core</artifactId>
    <version>0.10</version>
</dependency>
public class User {
    private int id;
    private boolean flag;
    private Integer age = 1;
    private boolean[] arr = {false};
}
import cn.laolei.pojo.User;
import org.openjdk.jol.info.ClassLayout;

/**
* 测试对象头
*/
public class Test {
    static User user = new User();

    public static void main(String[] args) {
        String printable = ClassLayout.parseInstance(user).toPrintable();
        System.out.println(printable);
    }
}

此结果不能证明:
单个boolean变量占4字节 boolean数组中每个占1字节
与此jar包机制有关

64位:1,2行为标记字8字节 3行为类指针

32位:
在这里插入图片描述引用类型本质是一个指针,64位占8字节,但是java中压缩了,只占4个字节。
在这里插入图片描述禁用参数后:
如果堆内存超过32G将自动禁用压缩参数 现在的64位机器实际上只有48根总线,也就是说只有48位可用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值