JVM理解(不断更新中)

JVM
  • 在JVM中,对象在堆内存中的布局分为三块区域:对象头、实例数据和对齐填充。
    • 对象头:采用2个字来存储(如果对象是数组则会分配3个字,多出来的1个字记录的是数组长度)
      • Mark Word 存储对象的hashCode、锁信息或分代年龄或GC标志等信息
        • 32位JVM的Mark Word存储结构

          重量级锁也就是通常说synchronized的对象锁,其中指针指向的是monitor对象(也称为管程或监视器锁)的起始地址。
      • Class Metadata Address 类型指针指向对象的类元数据,JVM通过这个指针确定该对象是哪个类的实例。
    • 实例变量:存放类的属性数据信息,包括父类的属性信息,如果是数组的实例部分还包括数组的长度,这部分内存按4字节对齐。
    • 填充数据:由于虚拟机要求对象起始地址必须是8字节的整数倍。填充仅仅是为了字节对齐。
  • Monitor 对象(也称为管程或监视器锁)
    • monitor对象存在于每个Java对象的对象头中(存储的指针的指向),synchronized锁便是通过这种方式获取锁的,也是为什么Java中任意对象可以作为锁的原因,同时也是notify/notifyAll/wait等方法存在于顶级对象Object中的原因
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值