一个Java对象到底占多大内存

Python016

一个Java对象到底占多大内存,第1张

对象

对象头在32位系统上占用8bytes,64位系统上占用16bytes。

实例数据

原生类型(primitive type)的内存占用如下:

Primitive TypeMemory Required(bytes)

boolean1

byte1

short2

char2

int4

float4

long8

double8

reference类型在32位系统上每个占用4bytes, 在64位系统上每个占用8bytes。

对齐填充

HotSpot的对齐方式为8字节对齐:

对象头 + 实例数据 + padding) % 8等于0且0 <= padding <8

指针压缩

对象占用的内存大小收到VM参数UseCompressedOops的影响。

1)对对象头的影响

开启(-XX:+UseCompressedOops)对象头大小为12bytes(64位机器)。

static class A {

int a

}

栈内存放引用型变量,指向堆里面new出来的对象

堆内存放new出来的对象

方法只有一份用来共享,只有在执行的时候才在内存中分配空间,如图: