Object obj=new Object()占用字节
对象内存中可以分为三块区域:对象头(Header),实例数据(Instance Data)和对齐填充(Padding),以64位操作系统为例(未开启指针压缩的情况)Java对象布局如下图所示:
Object obj=new Object()占用字节
这是网上很多人都会提到的一个问题,那么结合上面的Java内存布局,我们来分析下,以64位操作系统为例,new Object()占用大小分为两种情况:
- 未开启指针压缩 占用大小为:8(Mark Word)+8(Class Pointer)=16字节
- 开启了指针压缩(默认是开启的) 开启指针压缩后,Class Pointer会被压缩为4字节,最终大小为:8(Mark Word)+4(Class Pointer)+4(对齐填充)=16字节
<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.10</version> </dependency>
import org.openjdk.jol.info.ClassLayout; public class HeapMemory { public static void main(String[] args) { Object obj = new Object(); System.out.println(ClassLayout.parseInstance(obj).toPrintable()); } }
最后的结果是16字节,没有问题,这是因为默认开启了指针压缩,那我们现在把指针压缩关闭之后再去试试。
-XX:+UseCompressedOops 开启指针压缩
-XX:-UseCompressedOops 关闭指针压缩
再次运行,得到如下结果:
新建一个类,内部只有一个byte属性:
public class MyItem { byte i = 0; }
开启指针压缩,占用16字节:
关闭指针压缩,占用24字节:
在看如下类中添加了 int,long,boolean
添加string 常量
boolean类型补到int类型 加3个字节,string 指针4个字节
....
https://mp.weixin.qq.com/s/YJsTPd7YDzBqdWsNxnygrA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
2020-04-23 判断平衡二叉树
2020-04-23 面试题64. 求 1 + 2 + … + n