如何计算对象大小
2021-09-09 15:10:05 0 举报
jvm调优时如何计算对象大小
作者其他创作
大纲/内容
64位机器,8B的内存地址压缩为4B
boolen 1Bbyte 2Bshort 4Bint 4Blong 8Bchar 2Bfloat 8Bdouble 8B引用
规则:所有的对象大小都要被8整除,或者说是8字节对齐
所有的对象大小都要被8整除,或者说是8字节对齐
指针压缩
实例数据
开启
Object 空对象的大小无论指针压缩是否打开,都是16B
字节对齐填充
Mark word 8B类型指针 8B 数组长度 4B对齐填充4B(不清楚为什么还要填充)实例数据 int类型数组,有三个元素,4*3对齐填充0B共计36B
Mark word
假如说现在对象大写为12B,则需要填充4个字节,变为16个字节
关闭
4个字节
底层原理是什么?
面试题:32G堆瓶颈问题
8B+8B+0+0+0=16B
Mark word 8B类型指针 4B数组长度 4B实例数据 int类型数组,有三个元素,4*3对齐填充4B共计32B
数组长度
jol-core这个包可以打印出对象大小
对象组成部分
32G是2的35次方35=32+332怎么来的?指针压缩时,存储占4个字节,所以32位3怎么来的?使用的时候,会把3个0补上,左移三位
对象计算大小案例:
开启指针压缩 4个字节关闭指针压缩 8个字节
为什么可以这样做?
对象头
32位机器 4个字节64位机器 8个字节
类型指针klass pointer
默认开启
8B+4B+0+0+4B=16B
0 条评论
下一页