synchronized

1.java中有那些锁?

java中的锁

synchronized锁:
上锁就是改变对象布局的对象头
对象布局(java对象有什么组成):
在HotSpot虚拟机中,实例对象在内存中存储的布局可以分为三块区域:对象头,实例数据,和对齐填充。

  • 对象头(64位虚拟机为例)
    对象的五种状态 右侧红色区域表示对象的五种状态

  • 无状态(对象刚new出来的时候,无状态)

  • 偏向锁状态

  • 轻量锁

  • 重量锁

  • gc标记

1)第一部分用于存储对象自身运行时数据Mark word(哈希码,分代年龄,锁状态标志,线程持有实例,偏向线程ID,偏向时间戳等),这就是Mark Word部分,占64bit
2)第二部分是指向类的指针,即Class Metadata Address(klass pointer),对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。占32bit(jvm开启指针压缩后占32bit,未开启指针压缩占64bit)。

如果对象是一个数组,在头对象中还必须有一块用于记录数组长度的数据。

  • 实例数据
    存放类的属性数据信息,包括父类的属性信息,如果是数组的实例部分还包括数组的长度,这部分内存按4字节对齐。
  • 对齐填充
    由于虚拟机要求对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,仅仅是为了字节对齐。
    /*
  • byte 1byte = 8bit
  • short 2byte = 16bit
  • char 2byte = 16bit
  • int 4byte = 32bit
  • long 8byte = 64bit
  • float 4byte = 32bit
  • double 8byte = 64bit
  • boolean 1byte = 8bit
    */
    打印对象头部信息依赖
<dependency>
  <groupId>org.openjdk.jol</groupId>
  <artifactId>jol-core</artifactId>
  <version>0.8</version>
</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值