美文网首页
synchronized锁升级

synchronized锁升级

作者: ModestStorm | 来源:发表于2022-09-24 19:00 被阅读0次

    对象包括对象头MarkWord和对象数据及对象填充
    对象头MarkWord:对象的hashcode ,GC分代记录,锁记录,锁偏向id等数据
    对象数据:保存对象的数据
    对象填充:如果对象数据所占的字节数不是8的整数倍,使用对象填充保证对象是8字节的整数倍

    锁粗化:比如在循环迭代中加锁和释放锁,加锁操作会转移到循环体外

    偏向锁:偏向锁是指一段同步代码一直被一同个线程所访问,那么该线程会自动获取锁,降低获取锁的代价,偏向锁状态的 Mark Word 会记录内置锁自己偏爱的线程 ID

    轻量级锁:当有两个线程开始竞争这个锁对象,情况发生变化了,不再是偏向(独占)锁了,锁会升级为轻量级锁,两个线程公平竞争,哪个线程先占有锁对象,锁对象的 Mark Word 就指向哪个线程的栈帧中的锁记录,使用CAS自旋获取锁。

    如果持有锁的线程执行的时间超过自旋等待的最大时间仍没有释放锁,就会导致其他争用锁的线程在最大等待时间内还是获取不到锁,自旋不会一直持续下去,这时争用线程会停止自旋进入阻塞状态,该锁膨胀为重量级锁。

    重量级锁:重量级锁会让其他申请的线程之间进入阻塞,性能降低。

    相关文章

      网友评论

          本文标题:synchronized锁升级

          本文链接:https://www.haomeiwen.com/subject/jhbzortx.html