首页 > 其他分享 >JVM锁升级的过程

JVM锁升级的过程

时间:2023-09-24 23:12:41浏览次数:43  
标签:01 对象 申请 升级 CAS 线程 JVM 过程

  当一个Java类实例对象(obj)被 synchronized(obj){...}包装成为同步监视器对象(即锁对象)时,在不同程度的线程竞争情况下,它对象头(Header)中的Mark Word部分的变化情况如下表所示(即JVM锁升级的过程):

针对线程竞争场景

 

锁状态

25bit

4bit

1bit

2bit

23bit

2bit

是否偏向锁

锁标志位

没有线程申请锁的时候

无锁 

对象的HashCode

分代年龄

0

01

只有一个线程申请锁的时候

偏向锁 

线程ID

Epoch

分代年龄

1

01

两个线程并发申请锁的时候,此时线程CAS自旋获取锁

轻量级锁 

指向栈中锁记录的指针

00

超过两个线程申请锁或CAS自旋超过特定次数时,未拿到锁的线程阻塞

重量级锁 

指向重量级锁的指针

10

GC Roots 不可达的时候

GC标记

11

 

  备注:锁是不可以降级的!

标签:01,对象,申请,升级,CAS,线程,JVM,过程
From: https://www.cnblogs.com/xuruiming/p/17726909.html

相关文章

  • 网络技术-数据转发过程
    前言TCP/IP协议簇喝底层协议配合,保证了数据能够实现端到端的传输。数据传输过程是一个非常复杂的过程,例如数据在转发的过程中会进行一系列的封装和解封装。对于网络工程师来说,只有深入地了解了数据再各种不同设备上的转发过程,才能对网络进行正确的分析和检测。 网关:网关(Gate......
  • MySQL高级SQL语句和存储过程
    一、MySQL高级(进阶)SQL语句首先创建数据表uselwq;createtablelocation(Regionchar(20),Store_Namechar(20));insertintolocationvalues('East','Boston');insertintolocationvalues('East','NewYork');insertintolocationvalu......
  • [转]Websocket 底层是 TCP 还是 UDP?白话版解析 TCP 和 UDP 传输过程
    原文地址:Websocket底层是TCP还是UDP?白话版解析TCP和UDP传输过程-掘金写在前面在前面陆陆续续写了好几篇数字孪生相关的文章,而其中所涉及的一个其他项目比较不常使用的技术,网络通讯协议Websocket,这个协议主要用于服务器定时向客户端推送数据,相比HTTP更加适合数字......
  • JVM
    一、语言发展历史1、c/c++、、、1.需要手动管理2.忘记释放---就会出现内存泄漏,从而导致内存溢出。3.释放多次一个线程空间莫名其妙被另一个释放了 4.开发效率低2、javapythongo、、、1.方便内存管理......
  • SpringBoot项目优化和JVM调优
    在开发中项目调优是必须得熟练掌握的事情。在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。修改配置文件关于修改配置文件application.properties,可参考SpringBoot详细配置文件其中比较重要的有:#Maximumnumberofconnectionsthattheserveraccepts......
  • 78.一个简单的存储过程
    delimiter$$createtabletest.t3(idintnotnullprimarykey,namevarchar(20));truncatetablet3;dropprocedureifexistsdata;createproceduredata(iniint)beginwhilei<100000doinsertintotest.t3values(i,'菠萝');......
  • 修改jmeter的jvm参数
    加班途中开发问加的jvm参数怎么没生效,随即补一篇。 windowsjmeter.bat中,添加:setHEAP=-Xms2g-Xmx2g-XX:MaxMetaspaceSize=512msetGC_ALGO=-XX:+UseG1GC-XX:MaxGCPauseMillis=100-XX:G1ReservePercent=20 linuxjmeter中,添加:HEAP="-Xms2g-Xmx2g-XX:MaxMetaspa......
  • 在python开发过程中常见的异常错误
    下面这些也是常见的异常错误,在报错的时候不要害怕,记住这些常见的单词。AttributeError尝试访问未知的对象属性EOFError用户输入文件末尾标志EOF(Ctrl+d)FloatingPointError浮点计算错误GeneratorExitgenerator.close()方法被调用的时候ImportError导入模块失败......
  • 在操作过程中遇到Attempting to operate on hdfs namenode as root报错
    在操作过程中遇到Attemptingtooperateonhdfsnamenodeasroot报错HDFS格式化后启动dfs出现以下错误:[root@hadoop101sbin]#start-dfs.shStartingnamenodeson[hadoop101]ERROR:AttemptingtooperateonhdfsnamenodeasrootERROR:butthereisnoHDFS_NAMENO......
  • 使用mtrace追踪JVM堆外内存泄露
    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明。简介在上篇文章中,介绍了使用tcmalloc或jemalloc定位native内存泄露的方法,但使用这个方法相当于更换了原生内存分配器,以至于使用时会有一些顾虑。经过一些摸索,发现glibc自带的ptmalloc2分配器,也提供有追踪内......