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

JDK15开始偏向锁不再默认开启

JDK8中偏向锁
回忆一下对象头格式
|--------------------------------------------------------------------|--------------------|
| Mark Word ( 64 bits ) | State |
|--------------------------------------------------------------------|--------------------|
| unused: 25 | hashcode: 31 | unused: 1 | age: 4 | biased_lock: 0 | 01 | Normal |  普通模式 001
|--------------------------------------------------------------------|--------------------|
| thread: 54 | epoch: 2 | unused: 1 | age: 4 | biased_lock: 1 | 01 | Biased | 偏向锁 101
|--------------------------------------------------------------------|--------------------|
| ptr_to_lock_record: 62 | 00 | Lightweight Locked |
|--------------------------------------------------------------------|--------------------|
| ptr_to_heavyweight_monitor: 62 | 10 | Heavyweight Locked |
|--------------------------------------------------------------------|--------------------|
| | 11 | Marked for GC |
|--------------------------------------------------------------------|--------------------|
一个对象创建时:
  • 如果开启了偏向锁(默认开启),那么对象创建后,markword 值为 0x05 即最后 3 位为 101,这时它的 thread、epochage 都为 0;
  • 偏向锁是默认是延迟的,不会在程序启动时立即生效,如果想避免延迟,可以加 VM 参数-XX:BiasedLockingStartupDelay=0 来禁用延迟
  • 如果没有开启偏向锁,那么对象创建后,markword 值为 0x01 即最后 3 位为 001,这时它的 hashcode、 age 都为 0,第一次用到 hashcode 时才会赋值。
JDK17中添加禁用延迟参数,或者通过sleep查看偏向锁结果,均为disable状态
package com.kh.JUC;

import lombok.extern.slf4j.Slf4j;
import org.openjdk.jol.info.ClassLayout;

@Slf4j
public class BiasedLock {
    public static void main(String[] args) throws InterruptedException {
        Dog dog = new Dog();
        log.info("dog info: {}", ClassLayout.parseInstance(dog).toPrintable());
        Thread.sleep(5000);
        log.info("dog info: {}", ClassLayout.parseInstance(new Dog()).toPrintable());
    }
}

class Dog {

}

 

OpenJDK 官网如下:为降低维护成本,自JDK15之后,偏向锁默认是Disable的

 

深入理解整个流程:

在Java 17中偏向锁可算废了_jdk17偏向锁-CSDN博客 


http://www.kler.cn/a/589744.html

相关文章:

  • 求职招聘网站源码,找工作招工系统,支持H5和各种小程序
  • 13个问题
  • Java概述
  • Ubuntu22.04虚拟机里安装Yolov8流程
  • Oracle GoldenGate (OGG) 安装、使用及常见故障处理
  • SpringBoot集成ElasticSearch实现支持错别字检索和关键字高亮的模糊查询
  • 分治(2)——快速搜索算法
  • 51单片机学习记录
  • 时间序列分析的军火库:AutoTS、Darts、Kats、PaddleTS、tfts 和 FancyTS解析
  • 【小项目】四连杆机构的Python运动学求解和MATLAB图形仿真
  • 机器学习--卷积神经网络原理及MATLAB回归实现
  • Docker 使用指南
  • C# WPF编程-画刷(Brush)填充图形对象的颜色或图案
  • SpringBoot3和企业版Splunk集成(附加docker配置)
  • CoreData 调试警告:多个 NSEntityDescriptions 声明冲突的解决
  • 数模AI使用教程(新) 2025.3.17
  • Windows安全日志Defender 的配置被修改5007
  • Python数据可视化——生成数据(一)
  • Python基于Django和协同过滤算法实现电影推荐系统功能丰富版
  • 跟着AI复习一下pytorch原理和操作