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

  本篇文章为你整理了java计算一个实例对象占用空间大小的方法分享(java计算对象的内存大小)的详细内容,包含有java计算一个实例对象占用空间大小的方法分享函数 java计算对象的内存大小 java 计算对象大小 java对象占用内存 java计算一个实例对象占用空间大小的方法分享,希望能帮助你了解 java计算一个实例对象占用空间大小的方法分享。

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

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

  一个对象头部至少有两个WORD
如果对象是数组,则需要三个WORD,如下:

  对象的HashCode,锁信息

  对象类型数据的指针

  数组的长度(对象为数组)

  
在Java代码中,任何对象都是8字节对齐
属性按照[long,double]、[int,float]、[char,short]、[byte,boolean]、reference的顺序存放
例:

  

public class Test {

 

   byte a;

   int b;

   boolean c;

   long d;

   Object e;

  }

 

  

当一个对象的属性按照以上顺序存储,

 

  则其占用空间为

   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

  以上就是java计算一个实例对象占用空间大小的方法分享(java计算对象的内存大小)的详细内容,想要了解更多 java计算一个实例对象占用空间大小的方法分享的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: