java中对象的大小是多少

Ani*_*r C 5 java oop

众所周知,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 
Run Code Online (Sandbox Code Playgroud)

如果我创建一个类似的

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

Demo obj = new Demo();
Run Code Online (Sandbox Code Playgroud)

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

谢谢,
Anil Kumar C.

小智 8

来自http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

  1. 一个裸的Object占用8个字节;
  2. 具有单个布尔字段的类的实例占用16个字节:8个字节的标头,1个字节用于布尔值,7个字节用于"填充"以使大小达到8的倍数;
  3. 一个包含8个布尔字段的实例也将占用16个字节:标题为8,布尔值为8; 因为这已经是8的倍数,所以不需要填充;
  4. 一个具有两个长字段,三个int字段和一个布尔值的对象将占用:
    • 标题为8个字节;
    • 2个长的16个字节(每个8个);
    • 3个整数的12个字节(每个4个);
    • 布尔值为1个字节;
    • 另外3个字节的填充,将总数从37增加到40,是8的倍数.


thk*_*ala 4

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

对于每个对象,您需要为其对象标头(在 64 位 VM 上通常为 2*8 字节)、其字段(用于对齐的额外空间,具体取决于 VM 实现)提供空间。然后将最终的空格向上舍入到最接近的字长倍数。

  • @BigMike:通常,方法引用是类对象的一部分,而不是实例化对象的一部分。当然,基于 HotSpot 的虚拟机可以随意使事情变得复杂...... (2认同)