一个对象在jvm中占多少字节?
一个对象在jvm中占用多少字节?首先要知道一个类对象在jvm虚拟机(hotspot)中的组成,由markword、class pointer(类型指针)、instance data(实例数据)、padding(对齐)。网上我看到很多教程就是长篇大论,实际上自己走一遍,实际运行一遍代码就懂了
public class JustTest {
public static class MyClass {
// public int a; //4字节
// public int b; //4字节
// public Object object; //4字节
}
public static void main(String[] args) {
MyClass myClass = new MyClass();
System.out.println("Object created: " + myClass);
// 打印对象的内存布局
System.out.println("--- ClassLayout ---");
System.out.println(ClassLayout.parseInstance(myClass).toPrintable());
// 打印总尺寸(包括引用的对象)
System.out.println("--- GraphLayout (total size) ---");
System.out.println(GraphLayout.parseInstance(myClass).toPrintable());
System.out.println("Total size (bytes): " + GraphLayout.parseInstance(myClass).totalSize());
}
}
如果说类中有其他元素也是一样的,只要是所有字节加起来不能被8整除的,直接padding补全补到能被8整除,也可以说所有的类占用的字节都是8的倍数,同样的我们平时说的虚拟机也是指的64位虚拟机,8字节是64位
其他的类型比如布尔类型也会补

还记得这篇文章最上面图上说的class pointer开启压缩占用4字节吗?打印jvm默认自带的一些参数可以发现,默认帮你开启压缩了,class pointer和instance data都是默认被压缩的
版权属于:戏人看戏博客网
本文链接:https://blog.web3er.cn/archives/2022.html
若无注明均为戏人看戏原创,转载请注明出处,感谢您的支持!
暂无标签