# Java 中对象占多大内存
一个对象在堆内存中占多少内存空间,因 JDK 是 64 位还是 32 位有所区别,但是总体规则是相似的:
- 32 位 JDK
- 8 字节的头部信息;
- byte、boolean 占 1 字节;
- char、short 占 2 字节;
- int、float 占 4 字节;
- long、double 占 8 字节;
- 引用占 4 字节;
- 整体对齐到 4 字节的倍数。
- 64 位 JDK
- 12 字节的头部信息;
- 基本数据类型占字节数与 32 位一样;
- 引用在占 8 字节(开启【引用压缩】功能后,占 4 字节);
- 整体对齐到 8 字节的倍数。
JVM 在为对象分配内存时,会调整对象中的属性的先后顺序,以压缩内存空间。即,属性在内存中的先后顺序,不一定是你在 Java 类中定义的顺序。这是一种优化。这里不展开讲解。