Synchronized底层学习笔记

本文详细探讨了Java中的Synchronized关键字,包括其在对象头中的实现原理,对象内存布局的两种情况,以及同步优化。通过学习,你可以掌握Synchronized如何保证线程安全,并了解对象头的Mark Word和Class Metadata Address组件。同时,文章还介绍了Java对象的实例变量和填充数据,以及对象在堆内存中的分配规则。
摘要由CSDN通过智能技术生成

Synchronized底层学习笔记

学习目标:

掌握 Synchronized关键字

学习内容:

1、 Java的对象布局
2、Synchronized底层工作原理
3、Synchronized优化原理


学习时间:

20210206


学习产出:

synchronized关键字
上锁就是改变对象(LockTest.class) 的对象头

 synchronized(LockTest.class{
	for(int i = 0; i < 10; i++) {
		
	}	
 }

Java的对象布局
1、对象头
2、实例变量
3、填充数据

JAVA对象的布局:

  • 情况一:
    1、对象头
    2、实例变量
OFFSET  SIZE   TYPE DESCRIPTION             VALUE
    0    12    (object header)               N/A       
    12    4    	int L.i                      N/A
Instance size: 16 bytes
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
  • 情况二:
    1、对象头
    2、实例变量
    3、填充数据
OFFSET  SIZE   TYPE DESCRIPTION                               VALUE
     0    12        (object header)                           N/A
    12     4        (loss due to the next object alignment)
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
  • 小结:
情况一情况二
12 (object header) == 32bit*412 (object header) == 32bit*4
Instance size: 16 bytesInstance size: 16 bytes
4 int L.i4 (loss due to the next object alignment)

对象存储在JVM的堆内存中,JVM每次在堆内存为对象开辟8byte倍数的空间。

  • 什么是对象头?—— >
    对象的第一部分所有对象的公共部分
    存储了对象的布局、类型、GC状态、同步状态、标识哈希码等基本信息
  • Java对象头由什么组成?
    Mark Metadata 64bit
    Class Metadata Address/klass pointer 32bit
    在这里插入图片描述
    在这里插入图片描述
    计算HashCode:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值