什么是Java中的对象的大小(What is the size of the object in j

2019-06-24 08:46发布

大家都知道,Java使用以下数据类型

byte    Occupy 8 bits in memory
short   Occupy 16 bits in memory
int     Occupy 32 bits in memory
long    Occupy 64 bits in memory 

如果我创建像类

class Demo{
    byte b;        
    int i;
    long l;
}

Demo obj = new Demo();

现在的问题是obj尺寸< or > or =的尺寸b+i+l104 bytes 。 请给我澄清正当理由。

谢谢,
阿尼尔·库马尔Ç

Answer 1:

对象的内存大小取决于体系结构,主要是对VM是32位或64位。 实际的虚拟机实现也很重要。

对于每个对象,则需要空间为它的对象头(通常为2 * 8个字节在64位的虚拟机),它的字段(取决于VM实现用于对准额外的空间)。 那么最终的空间向上取整到字大小最接近的倍数。



Answer 2:

从http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

  1. 裸对象占用8个字节;
  2. 一类具有单个布尔型字段的实例占用16个字节:8个字节首标,为布尔1个字节和7个字节“填充”以使该尺寸可达8的倍数的;
  3. 具有八个布尔字段的实例也将占用16个字节:8用于报头,8为布尔值; 因为这已经是8的倍数,则无需填充;
  4. 有两个长田,三个int字段和一个布尔对象会占用:
    • 8个字节用于报头;
    • 16个字节用于2个多头(8个);
    • 12个字节用于3个int(4各自);
    • 1个字节为布尔;
    • 另外3个字节的填充,舍从37至40的总起来,为8的倍数。


Answer 3:

很难说,这将是在内存中obj的大小,类型大小指示帮助开发者,但实际上在内存这是一个有点不同。 我建议你阅读这篇文章 ,这真的很有趣。



Answer 4:

首先,你糊涂比特和字节。

其次,它也需要指针“虚表”,其中存储了关于其类的信息。 它将,最可能是32位系统的4个字节(32位)和在64位sytems 8个字节。

最后,需要注意的是,由于内存碎片,总程序存储器可能比所有对象的总和高。



Answer 5:

一个对象的头部可以采取32位JVM上的32位JVM 8个字节和12个字节。

每个原语的位(你不注明字节)的数量

对象分配8字节对齐,从而有至多7个填充字节在一个对象的末尾。 即实际使用的空间被向上舍入到8的倍数。

class Demo{ // 8 or 12 bytes
    byte b; // 1 byte
    int i;  // 4 bytes
    long l; // 8 bytes
}

Demo obj = new Demo();

因此,对象的大小可以取一个64位JVM上的32位JVM 24个字节和32个字节。



文章来源: What is the size of the object in java
标签: java oop