• Mark Word结构详解


    1. Mark Word结构

    1. 不同锁状态下32位Mark Word的结构信息
      不同锁状态下32位Mark Word的结构信息
    2. 不同锁状态下64位Mark Word的结构信息
      不同锁状态下64位Mark Word的结构信息
      如上图lockbiased_lock两个标记位组合在一起共同表示Object实例处于什么样的锁状态
    具体解释
    1. lock:锁状态标记位,占两个二进制位,由于希望用尽可能少的二进制位表示尽可能多的信息,因此设置了lock标记
    2. biased_lock:对象是否启用偏向锁标记,只占1个二进制位。为1时表示对象启用偏向锁,为0时表示对象没有偏向锁
    3. age:4位的Java对象分代年龄。在GC中,对象在Survivor区复制一次,年龄就增加1。当对象达到设定的阈值时,将会晋升到老年代。默认情况下,并行GC的年龄阈值为15,并发GC的年龄阈值为6。由于age只有4位,因此最大值为15,这就是-XX:MaxTenuringThreshold选项最大值为15的原因
    4. identity_hashcode:31位的对象标识HashCode(哈希码)采用延迟加载技术,当调用Object.hashCode()方法或者System.identityHashCode()方法计算对象的HashCode后,其结果将被写到该对象头中。当对象被锁定时,该值会移动到Monitor(监视器)中。
    5. thread:54位的线程ID值为持有偏向锁的线程ID。
    6. epoch:偏向时间戳

    2. 对象在内存中占用大小

    2.1 对象结构

    在这里插入图片描述

    2.1.1 结构解释
    1. 对象头
    • metadata:Klass 简单来说就是 Java 类在 HotSpot 中的 C++ 对等体,主要用于描述对象实例的具体类型。一般 JVM 在加载 class 文件时,会在方法区创建 Klass ,表示类的元数据,其包括常量池、字段、方法等。根据是否开启压缩(默认开始,可以手动修改)占用4或8字节。
    • [array length]:如果对象包含数字类型,这里会有占用,反之,没有不占用。
    1. 实例对象
      在这里插入图片描述
    2. 对象补齐:关于对齐填充,Java 对象的大小默认是按照 8 字节对齐,也就是说 Java 对象的大小必须是 8 字节的倍数。若是算到最后不够 8 字节的话,那么就会进行对齐填充

    实际大小:对象头+实例数据+对象填充

    2.2 举例String占用内存大小计算

    JDK1.8 String 结构:

    private final char value[];
     
    /** Cache the hash code for the string */
    private int hash; // Default to 0
     
    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    private static final long serialVersionUID = -6849794470754667710L;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在 Java 里数组也是对象,因而数组也有对象头,故一个数组所占的空间为对象头所占的空间加上数组长度加上数组的引用,即 8 + 4 + 4= 16 字节 。

    那么一个空 String 所占空间为:

    对象头(8 字节)+ 引用-metadata (4 字节 ) + char 数组(16 字节)+ 1个 int(4字节)+ 1个long(8字节)= 40 字节。

    String占用内存计算公式40 + 2*n,n为字符串长度。

  • 相关阅读:
    Springboot ruoyi配置mysql备份定时任务
    【剑指offer】---数组中的重复数字
    [Elastic-Job2.1.5源码]-12-调度作业的服务器IP和进程信息的持久化是如何设计的?
    【TiDB】一些很有意思的sql调优案例分享
    在Windows系统上搭建MongoDB-这篇文章刚刚好
    1162 Postfix Expression
    python笔记Ⅵ--函数、函数的参数
    java进阶1——JVM
    Navigation 组件(三) ViewModel,LiveData,DataBinding 组合使用
    中国汽车锂电池行业市场形势分析及投资风险研究报告
  • 原文地址:https://blog.csdn.net/sbl19940819/article/details/126707169