java基本数据类型内存占用需分场景:局部变量和数组元素按规范固定字节数(byte/boolean 1字节、char/short 2字节、int/float 4字节、long/double 8字节);作为对象字段时受8字节对齐和填充影响,实际大小常大于理论和;数组还需叠加对象头、长度字段及末尾填充;包装类是对象,内存远超对应基本类型。

Java 基本数据类型占用内存不能简单加总字段字节数,得看它在哪用:是局部变量、数组元素,还是对象里的成员字段——三者规则完全不同。
独立变量(局部变量、方法参数、数组元素)直接按规范算
这些场景下,JVM 严格按类型固定大小分配,与平台无关:
- byte、boolean:1 字节(注意:boolean 虽无 JVM 规范明确定义,但 HotSpot 实际存储普遍按 1 字节对齐,boolean[] 每个元素也占 1 字节)
- char、short:各 2 字节
- int、float:各 4 字节
- long、double:各 8 字节
例如:int a = 1; 在栈上占 4 字节;new byte[1000] 占 1000 字节(不含头开销)。
作为对象字段时,得考虑对齐和填充
类中声明的字段会按 8 字节边界对齐,JVM 自动插入 padding 字节,实际大小常大于理论和。
- 比如
class A { byte x; int y; }:x 占 1 字节,但后面要补 3 字节对齐,y 再占 4 字节 → 总共 8 字节 - 若写成
class B { int y; byte x; byte z; }:y(4) + x+z(2) + padding(2) = 8 字节,比分散声明更紧凑 - 字段顺序影响很大,小类型(byte/short/boolean)尽量集中声明,能显著减少填充
数组有额外头开销,总大小需叠加
基本类型数组(如 int[])是对象,堆上结构包括:
- 对象头:64 位 JVM + 压缩指针 → 约 12 字节
- 数组长度字段:4 字节
- 元素数据:length × 单元素字节数
- 末尾填充:使总大小对齐到 8 字节倍数
例如:new int[3] 占 ≈ 12 + 4 + 3×4 = 28 → 向上对齐为 32 字节。
别把包装类当基本类型算
Integer、Long 等是对象,不是基本类型:
-
int本身只占 4 字节;Integer至少含对象头(12 字节)+ value 字段(4 字节)+ 对齐填充 → 通常 16 字节 - 装箱后内存放大 4 倍,还触发 GC,高频场景(如集合、循环)务必慎用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











