Monitor对象:

所有的Java对象是天生的Monitor,每一个Java对象都有成为Monitor的可能。在Java虚拟机(HotSpot)中,monitor是由ObjectMonitor实现的,其主要数据结构如下(位于HotSpot虚拟机源码ObjectMonitor.hpp文件,C++实现的)

synchornized相关

对象头:

可以使用jol(java 对象布局)辅助查看

pom文件中添加依赖:

<dependency>

<groupId>org.openjdk.jol</groupId>

<artifactId>jol-core</artifactId>

<version>0.9</version>

</dependency>

 

synchornized相关

网上对于对象头中mark word相关的文章大部分不容易理解

1.大部分网上的都是32位虚拟机的介绍,现在基本都是64位

2.通过jol查看到的object header信息和网上介绍的无法对应(存储的大小端模式导致,主要由cpu决定)

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

锁优化:

Java SE1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”,所以在Java SE1.6里锁一共有四种状态,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态,它会随着竞争情况逐渐升级。

synchornized相关

相关文章:

  • 2021-07-26
  • 2022-01-01
  • 2021-04-12
  • 2022-12-23
  • 2021-09-19
  • 2022-12-23
猜你喜欢
  • 2022-01-29
  • 2021-06-09
  • 2022-03-06
  • 2023-03-13
  • 2021-12-12
  • 2021-11-19
相关资源
相似解决方案