当前位置: 首页 > wzjs >正文

做网站服务器一年多少钱百度指数分析大数据

做网站服务器一年多少钱,百度指数分析大数据,吉林住房和城乡建设厅网站,购物网站怎么做推广hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:synchronized锁升级是什么? 在 Java 中,synchronized 锁升级是 JVM 为了优化同步性能而引入的…

hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶

面试官:synchronized锁升级是什么?

在 Java 中,synchronized 锁升级是 JVM 为了优化同步性能而引入的机制(JDK 1.6+)。其核心思想是:根据线程竞争锁的激烈程度,动态调整锁的级别,从低开销的锁逐步升级到高开销的锁,从而减少不必要的性能损耗。


锁升级的四个阶段

锁的升级过程遵循以下顺序(不可逆):
无锁 → 偏向锁 → 轻量级锁 → 重量级锁


1. 无锁(No Lock)
  • 场景:对象未被任何线程锁定。
  • 特点
    • 初始状态,无同步需求。
    • 适合线程不访问共享资源的场景(如只读操作)。

2. 偏向锁(Biased Lock)
  • 场景:锁始终被同一个线程访问(无竞争)。
  • 原理
    • 在对象头中记录偏向的线程 ID(通过 CAS 操作)。
    • 后续该线程进入同步代码时,无需任何同步操作(直接访问)。
  • 优点:消除无竞争时的锁开销。
  • 升级条件
    • 当其他线程尝试竞争偏向锁时,偏向锁撤销(Revoke),升级为轻量级锁。

3. 轻量级锁(Lightweight Lock)
  • 场景:锁被多个线程交替访问(低竞争)。
  • 原理
    • 线程通过 CAS 自旋尝试获取锁(不会立即阻塞)。
    • 若自旋成功,对象头中存储指向锁记录的指针(Lock Record)。
    • 若自旋失败(超过阈值),升级为重量级锁。
  • 优点:减少线程阻塞带来的上下文切换开销。
  • 升级条件
    • 自旋失败(竞争加剧),或等待线程超过一定数量(默认自旋 10 次或自适应调整)。

4. 重量级锁(Heavyweight Lock)
  • 场景:多线程高竞争。
  • 原理
    • 锁由 JVM 通过操作系统级 互斥量(Mutex) 实现。
    • 未获取锁的线程直接进入阻塞状态(BLOCKED),等待唤醒。
  • 优点:避免 CPU 空转(自旋浪费资源)。
  • 缺点:线程阻塞和唤醒涉及内核态切换,性能开销大。

锁升级流程示意图

无锁 → (线程首次访问) → 偏向锁 → (出现竞争) → 轻量级锁 → (竞争激烈) → 重量级锁

锁升级的底层实现

  • 对象头(Object Header)
    锁状态信息存储在对象头的 Mark Word 中,包含锁标志位、线程 ID、锁记录指针等。

    • 32 位 JVM 的 Mark Word 结构示例:
      | 锁状态   | 25 bits          | 4 bits         | 1 bit (偏向锁) | 2 bits (锁标志) |
      |----------|------------------|----------------|----------------|----------------|
      | 无锁     | 对象的 hashCode  | 分代年龄       | 0              | 01             |
      | 偏向锁   | 线程ID + Epoch   | 分代年龄       | 1              | 01             |
      | 轻量级锁 | 指向锁记录的指针 |                |                | 00             |
      | 重量级锁 | 指向 Monitor 的指针 |              |                | 10             |
      
  • 锁升级触发
    通过 JVM 内置的优化策略(如竞争检测、自旋次数统计)动态调整。


锁升级的意义

  1. 性能优化

    • 避免无竞争或低竞争时直接使用重量级锁的开销。
    • 偏向锁和轻量级锁通过 CAS 和自旋减少线程阻塞。
  2. 适应性

    • 根据实际竞争强度动态调整,平衡吞吐量和响应时间。
  3. 兼容性

    • 保持 synchronized 的语法简洁性,开发者无需手动优化锁级别。

示例:锁升级过程

public class LockUpgradeExample {private static final Object lock = new Object();public static void main(String[] args) {// 线程1首次访问:偏向锁new Thread(() -> {synchronized (lock) {System.out.println("Thread1 获取锁");}}).start();// 线程2竞争:升级为轻量级锁new Thread(() -> {synchronized (lock) {System.out.println("Thread2 获取锁");}}).start();// 高竞争场景:最终升级为重量级锁for (int i = 0; i < 10; i++) {new Thread(() -> {synchronized (lock) {try { Thread.sleep(100); } catch (InterruptedException e) {}}}).start();}}
}

注意事项

  1. 锁降级

    • JVM 不会主动降级锁(如重量级锁不会回退到轻量级锁)。
    • 降级仅在某些特殊场景下发生(如全局安全点检查)。
  2. 偏向锁延迟

    • JVM 默认在启动后 4 秒才启用偏向锁(通过 -XX:BiasedLockingStartupDelay=0 可关闭延迟)。
  3. 禁用锁升级

    • 通过 JVM 参数控制(如 -XX:-UseBiasedLocking 禁用偏向锁)。

在这里插入图片描述

http://www.dtcms.com/wzjs/217221.html

相关文章:

  • 如何选择一家靠谱的网站建设公司郑州seo招聘
  • 做网站的旅行社网站怎么seo关键词排名优化推广
  • 淄川政府网站建设托管电商关键词工具
  • 郑州微网站建设宁波网站优化公司电话
  • 成都网站定制开发佛山做优化的公司
  • 做网站怎么偷源码做网站企业网站建设多少钱
  • 做电商的网站二级域名注册平台
  • 深圳精品网站设计要做网络推广
  • 深圳企业网站制作公司介绍网络营销策划内容
  • 做网站开发的笔记本配置武汉大学人民医院地址
  • 互联网建站国际军事最新头条新闻
  • 做网站申请域名空间企业培训课程视频
  • 新手如何做移动端网站百度推广有效果吗
  • 网站名重复网站搜索引擎优化方法
  • 东莞网站建设怎么样app有哪些推广方式
  • 如何做vip电影解析网站2023年10月爆发新冠
  • 做的网站百度搜不到seo网站推广报价
  • 做电子商务系统网站建设怎样做好网络营销推广
  • 怎样不让网站被收录seo快排技术教程
  • 河南做外贸网站的公司简介seo超级外链工具
  • 做邮箱网站广安seo外包
  • 惠阳住房和城乡建设局网站广州百度提升优化
  • 龙华网站(建设龙华信科)网络软件开发
  • 亚马逊网站开发的技术搜索网页内容
  • 昆山做网站找文博哪些平台可以免费发布产品
  • 网站审核员做点啥seo千享科技
  • 网站主机要怎么做深圳推广
  • 商务网站建设规划心得小红书kol推广
  • 网站开发技术说明免费个人网站怎么建立
  • 营口做网站多少钱百度竞价渠道户