首页IT科技java对象占用字节(java计算一个实例对象占用空间大小的方法分享)

java对象占用字节(java计算一个实例对象占用空间大小的方法分享)

时间2025-05-04 06:05:39分类IT科技浏览3285
导读:转自:http://www.java265.com/JavaJingYan/202110/16349927561557.html...

转自:http://www.java265.com/JavaJingYan/202110/16349927561557.html

下文笔者将讲述一个java对象占用空间大小的方法分享           ,如下所示:

对象头

一个对象头部至少有两个WORD

如果对象是数组,则需要三个WORD,如下: 对象的HashCode                ,锁信息 对象类型数据的指针 数组的长度(对象为数组) 计算规则

在Java代码中,任何对象都是8字节对齐

属性按照[long,double]          、[int,float]                、[char,short]      、[byte,boolean]     、reference的顺序存放

例: 当一个对象的属性按照以上顺序存储     , 则其占用空间为 head(8) + a(1) + padding(3) + b(4) + c(1) + padding(7) + d(8) + e(4) + padding(4) = 40 如果按照这个规则得到:head(8) + d(8) + b(4) + a(1) + c(1) + padding(2) + e(4) + padding(4) = 32 可以解决很多空间

在涉及继承关系时, 则我们会按照一个基本的原则           , 先放父类中的成员 然后再放入子类中的成员例:

class A { long a; int b; int c; } class B extends A { long d; }

按照以上规则的存储空间大小为:

head(8) + a(8) + b(4) + c(4) + d(8) = 32

当父类中的属性不够八个字节时                ,

父类中最后一个成员与子类的第一个成员的间隔如果不够4个字节     ,

此时需要扩展到4个字节的基本单位

例:
class A { byte a; } class B extends A { byte b; }

占用大小为:

head(8) + a(1) + padding(3) + b(1) + padding(3) = 16

-------------------------------------------------------

当子类的第一个成员是double或long

且父类未用完8个字节

JVM会破坏规将较小的数据填充到该空间

例:
class A { byte a; } class B extends A { long b; short c; byte d; }

按照以上的占用空间大小为:

head(8) + a(1) + padding(3) + c(2) + d(1) + padding(1) + b(8) = 24

声明:本站所有文章      ,如无特殊说明或标注                ,均为本站原创发布          。任何个人或组织          ,在未征得本站同意时      ,禁止复制                、盗用           、采集     、发布本站内容到任何网站                、书籍等各类媒体平台                。如若本站内容侵犯了原著者的合法权益                 ,可联系我们进行处理      。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
git合并多个提交的文件(git 多个commit 如何合并) windows10搜索工具设置(Win10/Win11如何高效地使用搜索引擎)