# 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 类中定义的顺序。这是一种优化。这里不展开讲解。