JAVA锁优化和膨胀过程.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
JAVA 锁优化和膨胀过程 在 HotSpot 虚拟机中,锁优化和膨胀过程是两个重要的技术,旨在提高多线程之间共享数据的效率和处理竞争问题。这些技术包括自适应自旋(Adaptive Spinning)、锁删除(Lock Elimination)、锁膨胀(Lock Coarsening)、轻量级锁(Lightweight Locking)和偏向锁(Biased Locking)。 自适应自旋是一种技术,通过多次尝试,达到锁的获取。如果在自旋的过程中成功获得锁,那么下一次可以设置更多的自旋次数,以提高锁的获取效率。 锁删除是一种技术,通过逃逸分析,发觉锁的获取实际上没有其他线程的竞争,或者同步块内进行的是原子操作,然后虚拟机可以直接删除锁,提高程序的执行效率。 锁膨胀是一种技术,通过扩大加锁的范围,以避免频繁的拿锁释放锁的过程。这种技术可以提高程序的执行效率,特别是在高并发的情况下。 轻量级锁是一种技术,通过减少锁的获取和释放的开销,以提高程序的执行效率。在轻量级锁的情况下,锁的获取和释放只需要简单的比较和交换操作,避免了昂贵的操作系统调用。 偏向锁是一种技术,通过引入偏向锁的概念,减少锁的获取和释放的开销。在大多数的情况下,锁不只不存在多线程的竞争,而且总是由同一个线程获得。偏向锁可以通过 -XX:+UseBiasedLocking 开启或者关闭偏向锁的猎取。 偏向锁的获取过程可以分为三个步骤:获取目标对象的 Mark Word,依据锁的标识为 epoch 去推断当前能否处于可偏向的形态;通过 CAS 操作将本人的线程 ID 写入到 MarkWord,如果 CAS 操作成功,则表示当前线程成功获取了偏向锁,连续执行同步代码块;如果是已偏向形态,先检测 MarkWord 中存储的 threadID 和当前访问的线程的 threadID 能否相等,如果相等,表示当前线程已经获得了偏向锁,则不需要再获得锁直接执行同步代码。 在偏向锁的撤销过程中,当其他线程尝试竞争偏向锁时,持有偏向锁的线程才会释放偏向锁,撤销偏向锁的过程需要等待一个全局平安点(全部工作线程都停止字节码的执行)。
剩余6页未读,继续阅读
- 粉丝: 0
- 资源: 7万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助