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

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博客 

相关文章:

  • Qt开发——问界M9空调
  • 强化学习的一些概念
  • 运维面试题(三)
  • Java虚拟机面试题:内存管理(中)
  • 【java】集合练习2
  • Chapter 4-11. Troubleshooting Congestion in Fibre Channel Fabrics
  • Nest系列:在 NestJS 中使用 Joi 进行环境变量验证与配置管理-03
  • Navicat如何查看密码
  • Chrome 浏览器的很多扩展不能用了
  • 数字签名与非对称加密的区别
  • LLM论文笔记 24: A Theory for Length Generalization in Learning to Reason
  • AJAX PHP:深入理解与实际应用
  • 【WEB APIs】DOM-节点操作
  • 本地部署Deep Seek-R1,搭建个人知识库——笔记
  • Spring Boot使用线程池创建多线程
  • 人工智能驱动数字孪生城市的实践探索
  • 《AI生成文章SEO 长尾关键词下拉词相关词抓取工具 SEO 裂变工具:高效驱动网站流量增长》
  • qq音乐 webpack 补环境
  • Unity3D仿星露谷物语开发31之设置地面属性方法探索
  • K8S学习之基础三十一:k8s中RBAC 的核心概念
  • 瑞士联邦主席凯勒-祖特尔、联邦副主席帕姆兰会见何立峰
  • 工程院院士葛世荣获聘任为江西理工大学校长
  • 逆境之上,万物生长
  • 硅料巨亏后弘元绿能割肉求生:逾12亿元内蒙古公司股权转让协鑫
  • 云南临沧一行贿案金额认定比受贿案多41万,重审时检方变更金额起诉
  • 秦洪看盘|受阻回落,蓄积新做多能量