详解Mark Word

对于一个Java对象来说,对象头是极其重要的,对象头主要有对象标记和类型指针两部分组成,接下来需要重点看下对象标记,也就是Mark Word,下面是针对64位JVM(那也就是说还有32位的,考虑到现在基本都是64的了,32的直接pass掉)的Mark Word来说的,它的组成是这样的:

在这里插入图片描述

一个Java对象由对象头,实例数据和对齐填充组成,其中对象头是极其重要的,对象头是由对象标记Mark Word和类型指针组成,其中又以Mark Word最重要,对于Mark Word它占8个字节也就是64位!

ok,以上内容都清楚吧!那咱就继续!

接下来咱就以锁这个切入点去详细的看看这个Mark Word!

我们都知道在并发情况下也就是要解决线程安全的话要加锁,其实这个加锁就是对对象加锁,那如何去判断或者说知道这个对象加锁了没有或者加的什么锁,这些个信息其实就保存在对象头中的Mark Word中,上面这张图就是关于一个Mark Word的具体结构,可以看出,一个Java对象其实在不同的状态下,它是不一样的,主要是有不同的锁,比如没有锁,轻量级锁,还有什么偏向锁,重量级锁等等,不同的锁,在Mark Word中就会有不同的状态标记。


JOL的引入

这就是一个空类,啥也没有,要怎么看这个对象标记Mark Word呢?这里我们需要加入一个依赖,也就是你的Java项目是个maven项目,可以引入pom依赖,然后添加以下依赖:

<dependency>
  <groupId>org.openjdk.jol</groupId>
  <artifactId>jol-core</artifactId>
  <version>0.10</version>
</dependency>

这个依赖是干嘛的呢?这是一个代码工具叫做JOL,也就是Java Object Layout,主要就是用来分析java虚拟机中的对象布局的,也就是在java对象在虚拟机中的大小和分布,ok,接下来加入上述这个依赖之后我们就可以这样操作

public static void main(String[] args) {
        System.out.println(VM.current().details());
    }

这样我们就可以看出使用虚拟机的一些情况,看打印输出:
在这里插入图片描述
接着我们就来看下我们创建的那个空类是怎样的一个情况,可以这样操作:

public static void main(String[] args) {
        MyClass myClass = new MyClass();
        //打印出相关的对象头信息
        System.out.println(ClassLayout.parseInstance(myClass).toPrintable());
    }

得出以下内容:
在这里插入图片描述
OK了,相关信息打印出来了,记住这是myclass的相关内部信息,那这些都是啥呢?看上面的图,是不是有个“Object header” 就是对象头

在这里插入图片描述
这是啥?主要就是来看我们的一个空对象占多大空间,之前也说了,对象头包括对象标记8字节和类型指针8字节,我们先来看对象标记,是不是这个:

在这里插入图片描述
也就是起始位置是0,然后前进4个字节,此时的起始位置就变成了4,接着再前进4个字节,那此时起始位置就成了8,此时对象标记就占8个字节,这没啥问题,接着我们看,起始位置是8,然后继续前进4字节,到达12的时候,其实此时类型指针就结束了,也就是8到12,类型指针就占了4字节

也就是此时这个对象就占据12个字节,可是不是说占据16个字节才对吗?我们知道java对象所占大小需要是8字节的整数倍,那为了满足这块,就又对齐填充了4字节,最终达到16字节 。

为什么会这样?其实是因为这里发生了指针压缩,在说这个指针压缩之前,需要明白这样的一东西:

在这里插入图片描述

public class MyClass {
    char c='a';
    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        //打印出相关的对象头信息
        System.out.println(ClassLayout.parseInstance(myClass).toPrintable());
    }
}

在空类中加入一个char类型,再看下结果:
在这里插入图片描述
接着我们再看一个:

public class MyClass {
    char c='a';
    int s=100;
}

在这里插入图片描述

为什么是6,一定要想明白了,记住8的倍数哦!对了,Instance size指的是一个对象有多大

指针压缩

接着我们再说之前指针压缩的问题,也就是类型指针是占8个字节的,可是实际上只占了4个字节,这就是指针压缩的问题,这里我们需要这么一个jvm参数,就是它:

java -XX:+PrintCommandLineFlags -version

也就是默认开启了指针压缩,所以我们的类型指针才变成了4字节。

value值分析

在这里插入图片描述

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 电力104规约是指国际电工委员会(IEC)制定的通信协议,用于电力系统的远程监控和控制。以下是电力104规约的详细内容: 1. 基本概念:电力104规约包含多个概念,如传输原语、应用服务数据单元(ASDU)、信息元素(IE)等。这些概念是理解电力104规约的基础。 2. 数据传输:电力104规约使用TCP/IP协议进行数据传输。通过建立一个基于客户端-服务器的连接,实现电力系统与监控中心之间的数据传输。 3. ASDU结构:ASDU是电力104规约中最重要的数据单元,用于传输监控和控制信息。ASDU包括类型标识、信息对象地址、信息元素等。 4. 传输模式:电力104规约支持多种传输模式,包括双向传输、单向传输和广播传输。这些不同的模式可根据实际需求进行选择。 5. 数据组织方式:电力104规约使用基于报文的数据组织方式。报文包括多个ASDU,用于传输不同类型的监控和控制信息。 6. 容错机制:电力104规约具有强大的容错机制,可以保证数据传输的可靠性和稳定性。例如,利用ASDU序列号和确认机制,可以检测和纠正数据传输中的错误。 7. 安全性:电力104规约中有一些安全机制,用于保护数据传输的安全性。例如,通过身份验证和加密技术,确保只有授权用户才能访问和控制电力系统。 总结起来,电力104规约是一种用于电力系统远程通信的标准协议,具有高可靠性、灵活性和安全性。它对于电力系统的监控和控制起到了重要的作用,使得远程操作变得更加便捷和安全。 ### 回答2: 《电力104规约详解》是一份关于电力通信规约的文档,它包含了对电力系统通信协议的详细解释和说明。 电力通信规约是为了实现电力系统中不同设备之间的数据交换和通信而制定的一系列标准和规范。《电力104规约详解》对104规约进行了全面的解析,解释了104规约的应用场景、功能特点以及数据传输过程等方面内容,帮助读者更好地理解和应用104规约。 首先,文档介绍了104规约的应用场景,包括电力系统的监控、控制以及数据采集等领域。它指出了104规约在电力系统保护、自动化和监控中的重要作用,以及与其他通信规约的关系。 其次,文档对104规约的功能特点进行了详细说明。它强调了104规约的实时性、可靠性和可扩展性等特点,解释了这些特点如何满足电力系统通信的需求。 文档还描述了104规约的数据传输过程。它解释了104规约中的主站和子站的概念,介绍了报文的结构和传输方式。同时,文档还提供了一些实际应用案例,帮助读者更好地理解104规约的使用方法。 最后,文档总结了104规约的优势和不足之处,并提出了对其的改进建议。它指出了104规约在实时性要求较高的场景下具有明显的优势,但在可靠性和安全性方面还有待加强。 总的来说,《电力104规约详解》是一份对电力系统通信规约104进行详细解析的文档,帮助读者更深入地了解和应用104规约。通过阅读该文档,读者可以对104规约的应用场景、功能特点和数据传输过程有更全面的认识,并且可以更好地应用104规约进行电力系统通信的工作。 ### 回答3: 电力104规约是一种用于电力通信传输的标准协议,它规定了电力系统中各个设备之间的通信方式和数据格式。 104规约采用了服务数据单元(ASDU)作为通信的基本单位,ASDU包含了数据信息的标识和内容。ASDU可以携带各种类型的数据,例如遥信、遥测、遥控等。 电力104规约的数据传输是基于客户-服务器的模式。服务器负责接收、处理和发送数据,而客户端负责发起、接收和解析数据。客户端通过发送命令来请求服务器获取数据或执行某种操作,服务器在收到请求后进行相应的处理并返回相应的响应。这样的通信模式可以保证数据的可靠性和安全性。 104规约中定义了多种类型的消息,例如总召唤命令、遥控命令、初始化命令等。这些命令可以实现从集中控制中心对电力系统进行监控、调度和控制。 电力104规约还具有高可靠性和实时性的特点。为了保证可靠性,104规约采用了数据帧的校验机制,能够检测和纠正传输过程中出现的错误。为了实时性,104规约使用了基于传输时间窗口(T0-T3)的机制,可以根据实际需要进行调节,以满足不同应用场景的延迟要求。 总之,电力104规约为电力通信提供了一个灵活可靠的标准化协议,能够实现电力系统的监控、调度和控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖虎·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值