java 对象字节数_JAVA一个对象占用多少字节

通过代码计算对象的大小

观察虚拟机配置

java -XX:+PrintCommandLineFlags -version

分析java对象的组成

普通对象

对象头:markword 8 (标识对象的状态,被回收了多少次)

ClassPointer指针:-XX:+UseCompressedClassPointers 为4字节(默认开启) 不开启为8字节(对象属于哪个Class)

实例数据 引用类型:-XX:+UseCompressedOops 为4字节(默认开启) 不开启为8字节 Oops Ordinary Object Pointers

Padding对齐,8的倍数 (64位的机器 按块来读,一下子读16个字节)

数组对象

对象头:markword 8

ClassPointer指针同上

数组长度:4字节

数组数据

对齐 8的倍数

用例测试

public classT03_SizeOfAnObject {public static voidmain(String[] args) {

System.out.println(ObjectSizeAgent.sizeOf(newObject()));

System.out.println(ObjectSizeAgent.sizeOf(new int[] {}));

System.out.println(ObjectSizeAgent.sizeOf(newP()));

}//一个Object占多少个字节//-XX:+UseCompressedClassPointers -XX:+UseCompressedOops//Oops = ordinary object pointers

private static classP {//8 _markword//4 _class pointer

int id; //4

String name; //4

int age; //4

byte b1; //1

byte b2; //1

Object o;//4

byte b3; //1

}

}

打印结果:

16 = 对象头8个 + ClassPointer指针 4个 +padding对齐 4个

16 = 对象头8个 + ClassPointer指针 4个 +数组长度 4个 +padding对齐0个

32 = 对象头8个 + ClassPointer指针 4个 + int id 4个 + name的引用四个 + int age 4个+1+1+4+1 + padding对齐

对象头具体包括什么

对象是怎么定位的

原文:https://www.cnblogs.com/ssskkk/p/12814931.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值