java 对象大小计算

说明:

对于64位机:一个对象由三部分组成

  1. 对象头(object header)
    • mark word :64bit
    • kclass pointer :32bit(默认使用指针压缩),如果取消指针压缩( XX:-UseCompressedOops),则占用64bit
    • 数组长度:数组对象才有,占用32bit
  2. 实例数据(instance data)。 这个与数据类型有关 :
    • byte:1*8 = 8bit
    • short:2*8 =16bit
    • int :4*8 = 32bit
    • long:8*8 = 64bit
    • reference:4*8 = 32bit (不使用指针压缩时,引用类型占用8个字节64bit)
  3. 填充数据。
    让对象总大小是8的倍数。

计算案例:

java 复制代码
class Person{
	String name;
	short age;
}
//计算规则
object header:
   markword: 8 byte
   kclass pointer: 4byte
instance data:
   name: 4byte
   age: 2byte
填充数据:
	6byte
总共占用: 8 +4 + 4 +2 +6 =24byte

对象结构:

相关推荐
爱的叹息9 分钟前
关于Spring MVC在无注解情况下通过参数名匹配获取请求参数的详细说明,包含代码示例和总结表格
java·spring·mvc
橘子青衫17 分钟前
掌握HttpClient技术:从基础到实战(java.net.http)
java·后端·架构
缘友一世1 小时前
解决Spring Boot上传默认限制文件大小和完善超限异常(若依框架)
java·spring boot·后端
FixBug_Nick1 小时前
Jenkins配置的JDK,Maven和Git
java·git·jdk·jenkins·maven
青春不流名1 小时前
flink iceberg写数据到hdfs,hive同步读取
java·大数据
lzjava20242 小时前
Redis数据结构之List
java·redis
爱的叹息2 小时前
Spring MVC 框架 的核心概念、组件关系及流程的详细说明,并附表格总结
java·spring·mvc
骑牛小道士3 小时前
java基础 迭代Iterable接口以及迭代器Iterator
java
代码吐槽菌4 小时前
基于微信小程序的智慧乡村旅游服务平台【附源码】
java·开发语言·数据库·后端·微信小程序·小程序·毕业设计
界面开发小八哥4 小时前
企业级Java开发工具MyEclipse v2025.1——支持AI编码辅助
java·ide·人工智能·myeclipse