众所周知,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+l是104 bytes.请以正当理由给我澄清.
谢谢,
Anil Kumar C.
小智 8
来自http://www.javamex.com/tutorials/memory/object_memory_usage.shtml
- 一个裸的Object占用8个字节;
- 具有单个布尔字段的类的实例占用16个字节:8个字节的标头,1个字节用于布尔值,7个字节用于"填充"以使大小达到8的倍数;
- 一个包含8个布尔字段的实例也将占用16个字节:标题为8,布尔值为8; 因为这已经是8的倍数,所以不需要填充;
- 一个具有两个长字段,三个int字段和一个布尔值的对象将占用:
- 标题为8个字节;
- 2个长的16个字节(每个8个);
- 3个整数的12个字节(每个4个);
- 布尔值为1个字节;
- 另外3个字节的填充,将总数从37增加到40,是8的倍数.
对象在内存中的大小取决于体系结构,主要取决于 VM 是 32 位还是 64 位。实际的虚拟机实现也很重要。
对于每个对象,您需要为其对象标头(在 64 位 VM 上通常为 2*8 字节)、其字段(用于对齐的额外空间,具体取决于 VM 实现)提供空间。然后将最终的空格向上舍入到最接近的字长倍数。
| 归档时间: |
|
| 查看次数: |
1965 次 |
| 最近记录: |