Java锁晋升步骤
文章目录
JVM锁晋升的过程
- new Object,此时对象内存中锁标志位中为00
- 对象第一次被访问时,对象内存中锁标志为101,表示锁晋升为偏量级锁,同时对象内存中存储调用对象的线程id
- 对象被另外一个线程同时访问,撤销偏量级锁,升级为轻量级锁(也叫无锁、自旋锁),锁标志位为00,两个线程通过CAS来给对象设置Lock Record指针,能设置成功则表示锁抢到,另外线程自旋等待
- 自旋达到一定程度(默认自旋10次),锁升级为重量级锁,锁标志位10,从系统中申请锁
Java对象的结构
查看Java对象内存布局
引入openjdk的jol依赖
<!-- https://mvnrepository.com/artifact/org.openjdk.jol/jol-core -->
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.13</version>
</dependency>
打印对象内存布局
import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.vm.VM;
/**
* java 对象内存分布
*/
class A{
long i;
}
public class MemoryLayoutTest {
public static void main(String[] args){
System.out.println(VM.current().details());
System.out.println(ClassLayout.parseClass(A.class).toPrintable());
}
}
资料来源
文章作者 pengxiaochao
上次更新 2020-08-30
许可协议 不允许任何形式转载。