java 对象头信息 (二)

本文深入探讨了Java对象的布局,特别是对象头的结构,包括Mark Word和Klass Pointer。通过JOL工具分析,揭示了对象头在64位VM中的12字节组成,其中8字节用于Mark Word,剩余4字节为Klass Pointer。Mark Word包含同步状态、哈希码和GC信息,而Klass Pointer指向描述对象布局和行为的元数据。文章还讨论了对象的实例数据、对齐字节以及不同锁状态下的Mark Word内容变化。
摘要由CSDN通过智能技术生成

java对象的布局以及对象头的布局
**1、JOL来分析java的对象布局 **
首先添加JOL的依赖

<!-- https://mvnrepository.com/artifact/org.openjdk.jol/jol-core -->
        <dependency>
            <groupId>org.openjdk.jol</groupId>
            <artifactId>jol-core</artifactId>
            <version>0.8</version>
        </dependency>

A.java

public class A {
   //没有任何字段
}

JOLExample1.java

import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.vm.VM;

import static java.lang.System.out;

public class JOLExample1 {
    static  A a = new A();
    public static void main(String[] args) {
        //jvm的信息
        out.println(VM.current().details());
        out.println(ClassLayout.parseInstance(a).toPrintable());
    }
}

运行结果

# Running 64-bit HotSpot VM.
# Using compressed oop with 3-bit shift.
# Using compressed klass with 3-bit shift.
# Objects are 8 bytes aligned.
# Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
# Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]

 OFFSET  SIZE   TYPE DESCRIPTION                               VALUE
      0     4        (object header)                           01 00 00 00 (00000001 00000000 00000000 00000000) (1)
      4     4        (object header)                           00 00 00 00 (00000000 00000000 00000000 00000000) (0)
      8     4        (object header)                           43 c1 00 f8 (01000011 11000001 00000000 11111000) (-134168253)
     12 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java EasyExcel 是一个基于Java的读写Excel工具,支持读取大量数据,同时也支持写入大量数据。多级表是指Excel表格中的表信息需要包含多个层级,通常用于对表格数据进行更加详细的分类。 在 Java EasyExcel 中,实现多级表可以通过嵌套的方式来创建表。首先,需要创建一个 Sheet 对象,然后在 Sheet 对象中创建多个 HeadRow 对象,每个 HeadRow 对象可以包含多个 HeadCell 对象,这些 HeadCell 对象可以再次嵌套 HeadRow 对象,以此实现多级表的效果。 例如,以下代码可以创建一个包含两个层级的表: ```java // 创建 Sheet 对象 Sheet sheet = new Sheet(1, 0); // 创建第一级表 List<HeadRow> headRows1 = new ArrayList<>(); HeadRow headRow1 = new HeadRow(0); headRow1.addCell(new HeadCell("名称", 0, 1)); headRow1.addCell(new HeadCell("描述", 0, 1)); headRows1.add(headRow1); // 创建第级表 List<HeadRow> headRows2 = new ArrayList<>(); HeadRow headRow2 = new HeadRow(1); headRow2.addCell(new HeadCell("字段1", 0, 1)); headRow2.addCell(new HeadCell("字段2", 0, 1)); headRows2.add(headRow2); // 将第级表添加到第一级表中 headRow1.setHeadCells(headRows2); // 将表添加到 Sheet 中 sheet.setHead(headRows1); ``` 以上代码中,首先创建了一个 Sheet 对象,然后创建了两个 HeadRow 对象,第一个 HeadRow 对象包含了两个 HeadCell 对象(名称和描述),第个 HeadRow 对象包含了两个 HeadCell 对象(字段1和字段2),这两个 HeadRow 对象形成了第一级和第级表。 最后通过将第级表添加到第一级表中,并将表设置到 Sheet 对象中,即可实现多级表的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值