zoukankan      html  css  js  c++  java
  • 07 锁的原理

    锁的原理

    java对象结构

    java对象包括对象头和实例数据,其中对象头12B,其中4B是对齐位

    对象头(12B)

    包含mark word 和 klass pointer

    • mark word 包含了锁信息,hashcode,gc信息(64bit,8B)
    • klass pointer 指定对象的元数据的指针(32bit,4B)

    makr word

    • 后7B用来存储hashcode信息
    • 第一个字节8为分别存储分代年龄、偏向锁信息和对象状态
    1bit没有使用 3bit 分代年龄 1bit偏向锁标志 1bit对象状态
    • 无锁状态

      如果单线程,且没有同步代码块或者手动上锁,为无锁状态
    • 偏向锁

      当只有一个线程来调用同步代码块时,会进入偏向锁状态

      但由于存在偏向锁延迟,可能有时候还是无锁状态

      存在偏向锁延迟是由于在Jvm启动时,会有大量的资源通过,而且大部分需要重量级锁,在不断地的从偏向锁释放锁很浪费资源,所以有偏向锁延迟(大概在4000毫秒),可以通过XX:+UseBiasedLocking --XX:BiasedLockingStartupDelay=0来关闭偏向锁延迟

      偏向锁只能偏向一次,但对于同一个类的批量消除偏向锁重新添加轻量级锁的情况,jvm会进行重新偏向

      偏向锁退出同步代码块后还是偏向锁
    • 轻量级锁

      轻量级锁退出同步代码块后会还原为无锁状态
  • 相关阅读:
    hdu 3333 树状数组+离线处理
    poj 2352 树状数组 OR Treap
    hdu 1698 线段树
    【概率dp】D. Card Collector
    【分段哈希】H. Paint the Wall
    【置换】G. Poker 2.0
    【概率dp】C. Race to 1 Again
    【dp】D. Caesar's Legions
    【并查集】F.find the most comfortable road
    【算法系列学习】连续邮资问题
  • 原文地址:https://www.cnblogs.com/lifeone/p/11653155.html
Copyright © 2011-2022 走看看