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

有教做点心的网站吗遵义网站网站建设

有教做点心的网站吗,遵义网站网站建设,濮阳今天确诊名单,河源市做网站大家好#xff0c;我是大明哥#xff0c;一个专注「死磕 Java」系列创作的硬核程序员。 回答 在 JDK 1.6之前#xff0c;synchronized 是一个重量级、效率比较低下的锁#xff0c;但是在JDK 1.6后#xff0c;JVM 为了提高锁的获取与释放效#xff0c;,对 synchronized 进… 大家好我是大明哥一个专注「死磕 Java」系列创作的硬核程序员。 回答 在 JDK 1.6之前synchronized 是一个重量级、效率比较低下的锁但是在JDK 1.6后JVM 为了提高锁的获取与释放效,对 synchronized 进行了优化引入了偏向锁和轻量级锁至此锁的状态有四种级别由低到高依次为无锁、偏向锁、轻量级锁、重量级锁。 锁升级就是无锁 — 偏向锁 — 轻量级锁 — 重量级锁 的一个过程注意锁只能升级不能降级。 原理详解 对象头 HotSpot 虚拟机中对象在内存中存储布局可以分为三块区域对象头Header、实例数据Instance Data和对齐填充Padding 对象头分为Mark Word 和 对象指针 Mark Word存储对象自身的运行时数据如哈希码HashCode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。对象指针存储指向类元数据的指针使得能够访问对象属于的类的信息。 实例数据存储对象的实际有效信息也就是我们在类中所定义的各种类型的字段内容。对齐填充可选字段通常存在于对象的末尾用于确保对象的大小是8字节的倍数因为许多JVM都使用8字节的对象对齐。这是出于性能考虑使得对象的地址在内存中是对齐的。 synchronized 锁相关的信息主要是在 Mark Word 区域我们先看看 Mark Word。 Mark Word synchronized 用的锁存在锁对象的对象头的Mark Word中我们先看 Mark Word 到底长什么样。 锁分类 无锁 无锁可以理解为单线程轻松愉快地运行没有其他的线程来和其竞争。但是无锁不代表没有同步它只是表示锁对象目前没有被任何线程显式锁定。 偏向锁 偏向锁 JDK 1.6 引入的一种锁优化机制。 何谓“偏向”就是锁对象会偏向于第一个获得它的线程。什么意思呢。 当一个线程访问同步代码块并获取锁时该锁会进入偏向模式锁标志的状态将被设置为偏向01并且锁的拥有者被设置为当前线程偏向锁线程 id 当前线程 id。当该线程执行完同步代码块后线程并不会主动释放偏向锁。当线程再次进入同步代码块时会首先判断此时持有锁的线程与它是否为同一线程如果是则正常往下执行由于此前是没有释放锁的所以这次就不会有任何的获取锁操作。 所以偏向锁是指当一段同步代码一直被同一个线程所访问时就不存在所谓的多线程竞争了那么该线程在后续访问时便会自动获得锁从而降低获取锁带来的消耗即提高性能。 偏向锁的锁释放是一个被动过程线程不会主动释放偏向锁只有当其他线程来竞争偏向锁时JVM 才会检测到锁的状态并触发撤销。但是撤销需要等待全局安全点所有线程会暂停JVM 会在全局安全点时判断锁对象是否处于被锁定状态如果没有被锁定且持有锁的线程不处于活动状态则将对象头设置为无锁状态并撤销偏向锁。 所以引入偏向锁的目的是认为当前环境下是不存在多线程竞争的场景可以认为是单线程环境同一个线程多次持有锁减少单线程环境下获取锁带来的不必要。 流程图如下: 轻量级锁 当一个线程持有偏向锁时另外一个线程来竞争锁这时偏向锁就会升级为轻量级锁。 轻量级锁的竞争方式一种比较轻量级的竞争方式当某个线程没有获取到锁它并不是立刻被挂起而是采取自旋的方式来竞争锁资源。在竞争较少的情况下轻量级锁通过减少线程阻塞和唤醒操作可以提高性能。 轻量级锁的目的在于它认为系统当前的竞争环境不是激烈如果采取阻塞和唤醒线程的方式则会过多地消耗系统资源。如果某个线程没有获取到轻量级锁则采取自旋的方式来判断锁资源是否已被释放。这种方式减少了上线文的切换。 但是长时间的自旋操作是非常消耗资源的一个线程获取了轻量级锁其他线程就只能在那里“空耗”它们不释放 CPU 资源但也不做任何事这种现象叫做忙等busy-waiting。所以我们是允许短时间的忙等用它来换取线程在用户态和内核态之间切换的开销。 触发轻量级锁的条件是两个 关闭偏向锁-XX:-UseBiasedLocking多个线程竞争偏向锁导致偏向锁升级为轻量级锁 流程图如下 重量级锁 轻量级锁自旋是要有限度的你不能一直在那里空转所以如果锁竞争环境比较严重当自旋次数达到某个阈值默认 10 次可自动调整后就是停止自旋此时锁膨胀为重量级锁。当其膨胀为重量级锁后其他线程就不再是等待了而是阻塞等待。重量级锁依赖对象内部的监视器monitor实现而 monitor 依赖的是操作系统的 MutexLock互斥锁。 由于是重量级锁那么等待锁资源的线程都会被阻塞虽然阻塞的线程不会消耗 CPU但是阻塞或者唤醒一个线程都需要通过底层操作系统来实现它会涉及到上下文切换用户态和内核态之间的转换这本身就是一个非常重量级、高开销的操作。 锁升级过程 锁升级就是无锁 — 偏向锁 — 轻量级锁 — 重量级锁 的一个过程注意锁只能升级不能降级。流程图如下 JVM 启动后锁资源对象直到有第一个线程访问时它都是无锁状态此时 Mark Word 内容如下 偏向锁标识为 0锁标识为 01。 当锁对象首次被某个线程假如为线程 Aid 为 1000001时锁就会从无锁状态升级偏向锁。偏向锁会在 Mark Word 中的偏向锁线程 id 存储当前线程的id1000001偏向锁标识为 1锁标识为 01如下 如果当前线程再次获取该锁对象只需要比较偏向锁线程 id 即可。 当有其他线程假如为线程 Bid 为 1000002来竞争该锁对象此时锁为偏向锁这个时候会比较偏向锁的线程 id 是否为线程 B 1000002我们可以判断不是所以会利用 CAS 尝试修改 Mark Word如果成功则线程 B 获取偏向锁成功此时 Mark Word 中的偏向锁线程 id 为线程 B id 1000002 但如果失败了就说明当前环境可能存在锁竞争则需要执行偏向锁撤销操作。等到全局安全点时JVM 会暂停持有偏向锁的线程 A检查线程 A 的状态若线程 A状态为不活跃或者已经执行完了同步代码块则设置锁对象为无锁状态线程 ID 为空偏向锁 0 锁标志位为01重新偏向同时恢复线程 A继续获取偏向锁。如果线程 A 的同步代码块还没执行完则需要升级为轻量级锁。在升级为轻量级锁之前持有偏向锁的线程 A是暂停的JVM 首先会在线程 A 的栈中创建一个名为锁记录的空间Lock Record用于存放锁对象目前的 Mark Word 的拷贝然后拷贝对象头中的 Mark Word 到线程 A 的锁记录中官方称之为 Displaced Mark Word 若拷贝成功JVM 将使用 CAS 尝试将对象头重的 Mark Word 更新为指向线程 A 的 Lock Record 的指针成功线程 A 获取轻量级锁此时 Mark Word 的锁标志位为 00指向锁记录的指针指向线程 A 的锁记录地址如下图 对于其他线程而言也会在栈帧中建立锁记录存储锁对象目前的 Mark Word 的拷贝。也利用 CAS 尝试将锁对象的 Mark Word 更正指向自身线程的 Lock Record如果成功表明竞争到轻量级锁则执行同步代码块。如果失败那么线程尝试使用自旋的方式来等待持有轻量级锁的线程释放锁。当然它不会一直自旋下去因为自旋的过程也会消耗 CPU而是自旋一定的次数如果自旋了一定次数后还是失败则升级为重量级锁阻塞所有未获取锁的线程等待释放锁后唤醒。 最后是锁升级过程的详细流程此图来源于网上 本文已收录到我的技术网站https://www.skjava.com。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经
http://www.w-s-a.com/news/204628/

相关文章:

  • 交易所网站开发水果营销软文
  • 石家庄有什么好玩的地方2017织梦网站怎么做seo
  • wordpress项目插件seo的含义
  • 网站平台建设的作用电影宣传类网页界面设计
  • 户外网站模板国外优秀的平面设计网站
  • 家政网站怎么做网站机房建设方案
  • 学校网站建设运行情况2022年近期舆情热点话题
  • 做淘宝需要知道什么网站吗有没有做软件的网站
  • 安丘网站建设制作做网站和微信小程序
  • 京东网站的建设与发展前景黑龙江建设网官网登陆
  • soho的网站怎么做微网站平台建设方案
  • 网站开发下载阿里云oss做视频网站
  • 东莞营销网站制作做一个网站建设
  • 啥网站都能看的浏览器下载网站后台管理系统展望
  • 新建站点步骤汉中 wordpress联盟
  • 坪山网站设计的公司网站 seo 设置
  • 济南网站设计公司排名如何免费注册网站域名
  • 网站开发分工甜妹妹福利wordpress
  • 网站中英文要怎么做网站建设的策划文案
  • 合肥推广外包公司佛山seo
  • 成都网站品牌设计策划课堂网站开发
  • 做直播网站赚钱公司网站空间怎么续费
  • 企业网站制作公司有哪些太原网站建设 thinkphp3.2
  • 云集网站哪个公司做的百度竞价排名怎么做
  • 做网站公司赚钱吗网站建设英语翻译
  • 网络公司除了做网站产品设计作品
  • dede网站模板替换湘潭建设路街道网站
  • 东莞网站优化效果如何网络设计工作
  • 网站备案系统验证码出错的解决方案任丘建设银行网站
  • 个人博客建站wordpress叮当app制作