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

建设网站注册功能wordpress 官方插件

建设网站注册功能,wordpress 官方插件,合肥比较好的网站制作,网站选择语言怎么做synchronized 锁升级实现原理 对象的内存结构 在HotSpot虚拟机中#xff0c;对象在内存中存储的布局可分为3块区域#xff1a;对象头#xff08;Header#xff09;、实例数据#xff08;Instance Data#xff09;和对齐填充 我们需要重点分析MarkWord对象头 MarkWord …synchronized 锁升级实现原理 对象的内存结构 在HotSpot虚拟机中对象在内存中存储的布局可分为3块区域对象头Header、实例数据Instance Data和对齐填充 我们需要重点分析MarkWord对象头 MarkWord hashcode25位的对象标识Hash码age对象分代年龄占4位biased_lock偏向锁标识占1位 0表示没有开始偏向锁1表示开启了偏向锁thread持有偏向锁的线程ID占23位epoch偏向时间戳占2位ptr_to_lock_record轻量级锁状态下指向栈中锁记录的指针占30位ptr_to_heavyweight_monitor重量级锁状态下指向对象监视器Monitor的指针占30位 我们可以通过lock的标识来判断是哪一种锁的等级 后三位是001表示无锁后三位是101表示偏向锁后两位是00表示轻量级锁后两位是10表示重量级锁 2.2.3 再说Monitor重量级锁 每个 Java 对象都可以关联一个 Monitor 对象如果使用 synchronized 给对象上锁重量级之后该对象头的Mark Word 中就被设置指向 Monitor 对象的指针 简单说就是每个对象的对象头都可以设置monoitor的指针让对象与monitor产生关联 2.2.4 轻量级锁 在很多的情况下在Java程序运行时同步块中的代码都是不存在竞争的不同的线程交替的执行同步块中的代码。这种情况下用重量级锁是没必要的。因此JVM引入了轻量级锁的概念。 static final Object obj new Object();public static void method1() {synchronized (obj) {// 同步块 Amethod2();} }public static void method2() {synchronized (obj) {// 同步块 B} }加锁的流程 1.在线程栈中创建一个Lock Record将其obj字段指向锁对象。 2.通过CAS指令将Lock Record的地址存储在对象头的mark word中数据进行交换如果对象处于无锁状态则修改成功代表该线程获得了轻量级锁。 3.如果是当前线程已经持有该锁了代表这是一次锁重入。设置Lock Record第一部分为null起到了一个重入计数器的作用。 4.如果CAS修改失败说明发生了竞争需要膨胀为重量级锁。 解锁过程 1.遍历线程栈,找到所有obj字段等于当前锁对象的Lock Record。 2.如果Lock Record的Mark Word为null代表这是一次重入将obj设置为null后continue。 3.如果Lock Record的 Mark Word不为null则利用CAS指令将对象头的mark word恢复成为无锁状态。如果失败则膨胀为重量级锁。 偏向锁 轻量级锁在没有竞争时就自己这个线程每次重入仍然需要执行 CAS 操作。 Java 6 中引入了偏向锁来做进一步优化只有第一次使用 CAS 将线程 ID 设置到对象的 Mark Word 头之后发现 这个线程 ID 是自己的就表示没有竞争不用重新 CAS。以后只要不发生竞争这个对象就归该线程所有 static final Object obj new Object();public static void m1() {synchronized (obj) {// 同步块 Am2();} }public static void m2() {synchronized (obj) {// 同步块 Bm3();} }public static void m3() {synchronized (obj) {} }加锁的流程 1.在线程栈中创建一个Lock Record将其obj字段指向锁对象。 2.通过CAS指令将Lock Record的线程id存储在对象头的mark word中同时也设置偏向锁的标识为101如果对象处于无锁状态则修改成功代表该线程获得了偏向锁。 3.如果是当前线程已经持有该锁了代表这是一次锁重入。设置Lock Record第一部分为null起到了一个重入计数器的作用。与轻量级锁不同的时这里不会再次进行cas操作只是判断对象头中的线程id是否是自己因为缺少了cas操作性能相对轻量级锁更好一些 实现全流程 在java6.0之前我们使用synchronized是为了解决多个线程之间的竞争问题使用的是重量级锁。其实现是通过监视器Monitor来实现。但在java6之后就引入了偏向锁轻量级锁以及重量级锁。下面是锁升级的全流程介绍 首先当一个对象刚被创建在其对象头当中会设置Mark Word信息Mark Word是用来保存对象的基本信息如hash值锁信息等。当一个对象刚被创建其状态必然是无锁状态在对象头的Mark Word当中就会有个所表示用来表示当前状态无锁为00.当一个线程尝试获取锁时就会检查Mark Word当中的信息判断其状态如果为无锁状态就会尝试通过CAS的方式去修改锁表示在CAS执行成功后同时还会在Mark Word当中储存当前线程的线程ID之后会在锁的内存当中创建一条所记录用于备份对象头当中的Mark Word信息。 此时如果还有其他线程进入首先回去判断Mark Word当中的线程ID与自身线程ID是否相同如果不同则表明出现了锁竞争jvm会将当前锁升级为轻量级锁。在轻量级锁当中对象的Mark Word会保存一个锁对象的地址指针线程需要用过CAS的方式去修改这个指针使其指向自己哪个线程修改成功就可以获取锁。除此之外轻量级锁同偏向锁一样也会在线程内部创建所记录但是轻量级锁的所记录条数取决于重入次数只有第一次所记录才会记录对象的Mark Word信息重入锁的所记录不会记录Mark Word。 如果其他线程多次尝试获取锁失败说明当前竞争非常激烈此时jvm就会将锁升级为重量级锁重量级锁是通过监视器Monitor实现的锁对象的对象头会通过Mark Wrld指向一个监视器。在监视器的内部主要包含三个组成OwnerEntitySetWaitSet。当线程尝试获取锁的时候就会去检查Owner当中是否为空如果为空则尝试将Owner与自身线程绑定即占有了该锁。此时如果还会有线程进入一样需要查看Owner当中是否为空如果不为空则会被放入EntitySet当中该结构是用来储存等待的线程的。当Owner线程执行完毕释放锁就会通过计算机操作系统通过内核态来唤醒这些线程去抢锁。除此之外对于使用了Wait方法的线程监视器会将其放入WaitSet队列当中进行等待 Monitor实现的锁属于重量级锁你了解过锁升级吗 Monitor实现的锁属于重量级锁里面涉及到了用户态和内核态的切换、进程的上下文切换成本较高性能比较低。在JDK 1.6引入了两种新型锁机制偏向锁和轻量级锁它们的引入是为了解决在没有多线程竞争或基本没有竞争的场景下因使用传统锁机制带来的性能开销问题。
http://www.pierceye.com/news/841905/

相关文章:

  • 怎么套用模板做网站白嫖二级域名
  • 网站如何进行备案建立平台的步骤
  • 济南免费网站建设网站用什么软件编写
  • 网站如何注册微信公众平台 类型站长要维护网站
  • 美食类网站模板有的网站为什么打不开怎么回事
  • 平面设计网站导航1万元可以注册公司吗
  • 做网站接口多少钱怎样做旅游网站
  • dw制作旅游网站教程天津市区县档案部门网站建设指导意见
  • 关于网站建设的大学pinthis wordpress
  • 济宁 做网站企业做外贸网站常用术语
  • 国内优秀的设计网站推荐网页设计工作室赚钱吗
  • 商汇通网站广州白云学校网站建设
  • 茶叶企业建设网站php网站开发基础
  • 深圳网站建设 猴王网络地方信息网站源码
  • 微网站后台内容设置erp系统定制
  • 图片点击切换网站模板网站开发 北京外包公司
  • 网站正在建设中 免费东莞手机网站设计公司
  • 旅游网站开发成本包括企业管理控制系统
  • 青浦做网站中美最新局势分析
  • 高端网站建设公司哪家公司好有关网站开发的知识
  • 西宁做网站_君博示范cpa做电影网站侵权吗
  • 云梦网站开发什么是网络营销市场营销学
  • 六安建六安建设网站徐州招标信息网
  • 公司做一个网站内容如何设计方案效果图网址
  • 环保部网站建设项目验收方案软件界面设计工具都有什么
  • 外贸 静态网站 怎么做微信红包建设网站
  • 南京网站优化哪家好卖文具的网站建设
  • 黔西南州住房和城乡建设局网站wordpress导航浮动
  • 建设建材网站的目的免费网站建设的
  • 沈阳模板建站公司推荐wordpress 增加导航