对象的内存结构及占用空间的计算方法

本文详细分析了Java中Integer, Long, Object, String, ArrayList和HashMap等对象的内存结构,计算了它们在内存中占用的空间,包括头信息、成员变量和填充字节。例如,一个简单的HashMap在存储一个键值对后,占用264字节。调用keySet(), values()和entrySet()方法后,内存占用会分别增加到280字节、296字节和312字节。" 83754901,8192373,Java连接数据库的详细步骤,"['Java', '数据库', 'JDBC']
摘要由CSDN通过智能技术生成
很早就对数据在内存中的结构和体积有深入了解的想法。平时写代码的过程中,对于这些完全处于一种感性的认识,对于代码中使用的数据结构和对象,尤其是处理大量数据的时候,总有种把控不住的感觉。 趁周六日有时间的功夫,通过查阅一些有关虚拟机和内存对象的资料,和Eclipse查看源码,自己琢磨着实实在在计算一下一个对象到底是占用了多少空间,它在内存中到底是个什么样子的。于是经过了两天的探索, 总于有了下面这篇文章。
对于文章中涉及到的数据,不同的JDK环境可能会有一些小出入,这包括 JDK的版本,JDK32/64位,JVM参数分配的内存大小,垃圾回收器的种类。
就本文中的数据,来源于jdk1.7.0_79 64位,WIN7 64位,Eclipse Version: Mars Release (4.5.0)。
个对象计算出的占用空间大小都是在自己机器上经过验证了的,具体的验证方法会在接来的一篇文章中贴出来。如果对文中的数据有疑问,十分欢迎指正交流,本着小菜鸟不断学习的态度,希望大家共同进步。

对象=对象头+成员变量+对齐填充
对象头结构java 对象在 Heap 里面的结构是这样的:对象头跟对象体,对象体跟 C 里面的结构体是一样的,对象头由两个域组成:用于存放 hashcode 同步 GC_mask ,和指向方法区该对象 Class 对象的指针—— _klass 域,对于 64
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值