涨姿势啦!Java程序员装X必备词汇之Mark Word!

本文详细介绍了Java对象中的Mark Word,包括它的作用、结构和在不同锁状态下的变化。通过实例分析,解释了对象实例的组成部分,如对象头、实例数据和对齐填充,以及类型指针的概念。利用JOL工具展示了对象在内存中的布局,并探讨了指针压缩。文章适合想要深入了解Java并发编程和锁机制的读者。
摘要由CSDN通过智能技术生成

写在前面

如果你已经知道什么是Mark Word,那我也希望你都好好阅读下本篇文章,因为你有可能发现不一样的切入点来帮助你更加深入的了解Mark Word,这对你来说是个很好的巩固所学知识的机会,同时也是一场技术交流,一个有逼格的程序员应该不会错过这样的机会吧! ​

如果你还不知道什么是Mark Word,那你更要好好阅读本篇文章了,因为Mark Word不仅是一个可以让你用来装X的词汇,实际上它是一个非常重要的概念,非常重要的知识点,对你学习Java中的各种锁是非常有必要的,也可以说是必须的,而为什么要阅读本篇文章嘞? ​

因为,庆哥的文章,接地气啊,通俗易懂,那咱就一起搞起吧!


先来看下Mark Word

Mark Word是啥?翻译过来就是对象标记,先通过代码让你直观看下Mark Word到底是个什么东东,来看下面代码:

class OneClass{
    
}
复制代码

这是啥?一个非常非常简单的类,啥也没有,就是声明了一个类对吧,好,看接下来的操作:

public static void main(String[] args) {
        System.out.println(ClassLayout.parseInstance(new OneClass()).toPrintable());
}
复制代码

这是啥?先来看看打印出来的是些个啥?

image.png

看得懂吗?红框中的就是对象标记Mark Word了,那今天这篇文章的目的就是让你读懂上面这张图到底是个啥?以及有哪些重要的信息! ​

事先声明,今天的文章,干货比较多,看起来有点费劲,请先做好准备! ​

开干! ​


从对象实例开始讲起

**什么是对象实例呢?**说的简单点,我们new出来的东西就是一个对象实例,也就是平常说的什么实例化,就是你创建出来的那个在堆里面的实例对象,ok,这个概念相信大家都懂,不赘述,接下来你就有可能不知道了,你说对于一个对象实例,它有哪几部分组成呢? ​

  1. 对象头
  2. 实例数据
  3. 对齐填充

这些都是啥?这里我们可以类比下我们的人,一个对象实例就好比是一个完整的人,拿你自己来类比就行,这里我们拿你自己来类比,这个对象头就是你的大脑啦,然后实例数据就好比的身体,而对齐填充就好比你的脚,画个图大概就是这样的:

image.png

这里可能这个对齐填充大家不是很好理解,什么意思呢?就比如说你要参加一个面试,但是人家硬性要求一米八,但是你就是一米七八,咋办,鞋垫子拯救你啊,懂我意思吧。 那这个对齐填充也是这么回事,对齐填充要求一个对象实例的大小必须是8个字节的倍数,那你不够了的话,对齐填充起作用给你整到8字节的倍数,懂了吧!

现在我们知道了,一个对象实例包括对象头,实例数据和对齐填充,其实更详细的还有如下划分,看图:

image.png

什么意思呢?就是你得知道这么一回事,对于对象头来说,它是分为两部分的,一是对象标记,也就是今天要注重说的Mark Word,还有一个就是Class Pointer类型指针了,咱们的重点是Mark Word! ​

实例数据和对齐填充

这里先给大家简单说说什么是实例数据,帮助大家有个直观的认识! ​

什么叫做实例数据呢?写一个简单的代码来举例说明:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值