JVM的markWord内容

一、32位JVM
在这里插入图片描述
二、64位JVM
在这里插入图片描述

三、synchronized的锁升级过程中,markWord内容
锁状态:
  当一个对象刚开始new出来时,该对象是无锁状态。此时偏向锁位为0,锁标志位01
  如果有线程上锁:
    指的就是把markword的线程ID改为自己线程ID的过程
  如果有线程竞争:
    撤销偏向锁,升级轻量级锁
    线程在自己的线程栈生成LockRecord,用CAS操作将markword设置为指向自己这个线程的LockRecord的指针,设置成功者得到锁
  如果竞争加剧
    竞争加剧:有线程超过10次自旋, -XX:PreBlockSpin,或者自旋线程数超过CPU核树的一半,1.6之后,加入自适应自旋adapative self spinning,JVM自己控制;
    升级重量级锁: 向操作系统升级资源,等待操作系统的调度,然后再映射会用户空间;

四、hashCode为什么可以用31位显示?

如果对象没有重写hashCode,那么默认调用os::random产生hashCode,可以通过
System.identityHashCode获取;

os::random产生hashCode规则:next_rand = (16807 seed)mode(2*31-1)

所以使用31位存储,另外一旦产生了hashCode,JVM会将其记录在markWord中;

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值