记一次对java对象在内存中的分析

Posted 不放糖的咖啡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次对java对象在内存中的分析相关的知识,希望对你有一定的参考价值。

java 对象 占内存大小 计算方式 及 常用类型的占用

HotSpot的对齐方式为8字节对齐 ----计算公式:(对象头 + 实例数据 + padding) % 8等于0且0 <= padding < 8

Hotspot 机 中 普通对象
32位 对象头 占 8个字节 引用类型 占 4字节
64位 对象头 占 16个字节 引用类型 占 8字节

64位中
空对象数组 对象头 占 24 增加一个长度 增加 一个引用类型的长度 64位中是 8
空的基本数据类型数组 对象头 占 24 增加一个长度 增加一个基本数据类型自身的 长度


64位 压缩后

普通对象 对象头 占 12个字节 引用类型 占 4字节

数组对象压缩后 对象头 占 16
增加一个长度 增加一个基本数据类型自身的 长度
----因为 java 的跨平台性,所以基本类型的数据在32位和64位上占内存大小是一样的

1Bytes = 8bit cpu一次能处理的数据位数----32位和64位----4字节和8字节

对象头的内存布局

对象自身的运行数据 占一次cpu 指向对象实例的指针 占 一次cpu
数组比较特殊,因为要把数据长度存到头部,所以又要占 一次cpu

以上可以看出 普通对象的对象头 有两部分 而 数组对象有三部分
可以推算出
32 位 普通对象 的对象头 是 8 数组 的对象头是 12
64 位 普通对象 的对象头 是 16 数组 的对象头是 24














以上是关于记一次对java对象在内存中的分析的主要内容,如果未能解决你的问题,请参考以下文章

记一次JAVA使用ProcessBuilder执行Shell任务卡死问题分析

记一次对 Laravel-permission 项目的性能优化

记一次@XmlSeeAlso的奇怪地方

记一次内存泄漏DUMP分析

记一次java内存溢出的解决过程

java信号量