java中一个空的Object对象在HotSpot虚拟机中占用多大的内存空间?

在HotSpot虚拟机中,一个空的Object对象在64位的环境下通常占用约 16 字节的对象头。
这个对象头包括:

  1. 标记字(Mark Word): 8 字节,用于存储对象的状态信息、锁信息等。
  2. 类型指针(Class Pointer): 4 字节,指向该对象的类的元数据。
  3. 对齐填充(Alignment Padding): 通常是 4 字节,用于满足对象在内存中的对齐要求。

对象头大小可以通过使用ObjectLayout类来获取,该类是OpenJDK中的一个工具类,提供了关于对象布局的信息。

  1. 添加依懒
<dependency>
	<groupId>org.openjdk.jol</groupId>
	<artifactId>jol-samples</artifactId>
	<version>0.17</version>
</dependency>
  1. ObjectSizeDemo类
package com.xiangpingeasy.learn.demo;

import org.openjdk.jol.info.ClassLayout;

public class ObjectSizeDemo {

    public static void main(String[] args) {
        Object obj = new Object();
        String objectLayout = ClassLayout.parseInstance(obj).toPrintable();
        System.out.println(objectLayout);
    }
}

  1. 运行输出结果
java.lang.Object object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4        (object header: class)    0x00000e80
 12   4        (object alignment gap)    
Instance size: 16 bytes
Space losses: 0 bytes internal + 4 bytes external = 4 bytes total

这个工具类需要添加相关的依赖,具体的使用方法和输出会根据具体的HotSpot虚拟机版本而有所不同。在实践中,这样的小对象占用的空间相对较小,但具体的大小仍然可能会受到JVM版本、运行时参数等因素的影响。

  • 32
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值