java基本类型内存占用因使用场景而异:局部变量和数组元素按规范固定字节数(如int为4字节),对象字段需8字节对齐并可能填充,数组含对象头、长度字段和数据区,包装类为对象,内存远大于对应基本类型。

Java 基本数据类型内存占用不能简单加总字段字节数,得看它在哪、怎么用——局部变量、对象字段、数组元素,三者规则完全不同。
基本类型的标称大小(独立变量场景)
作为局部变量(方法内定义)或数组元素时,内存按 JVM 规范固定分配,与平台无关:
- byte、boolean:各占 1 字节(注意:boolean 虽逻辑上只需 1 bit,但 JVM 不支持 bit 寻址,实际按 1 字节对齐和存储)
- short、char:各占 2 字节
- int、float:各占 4 字节
- long、double:各占 8 字节
验证方式很直接:调用对应包装类的 BYTES 常量,例如 Integer.BYTES 返回 4,Double.BYTES 返回 8。
作为对象字段时的真实开销
当基本类型是类的成员变量时,JVM 会按 8 字节边界对齐,自动插入填充字节(padding),导致实际内存大于理论值。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 空对象(
new Object())占 16 字节:对象头 12 字节 + 4 字节填充 -
class A { byte a; long b; }表面 1+8=9 字节,实际布局为:对象头(12) + a(1) + padding(7) + b(8) = 28 字节 - 合理排序能减少浪费:
class B { long b; byte a; short c; }可紧凑排布为 b(8) + a(1)+c(2)+padding(5) = 16 字节(对齐后)
基本类型数组的总内存结构
数组是对象,堆中分配,结构包含三部分:
- 对象头:64 位 JVM + 压缩指针(默认开启)≈ 12 字节
- 数组长度字段:固定 4 字节
-
元素数据区:
length × 元素字节数 - 末尾可能补零,使总大小是 8 字节倍数
例如:new int[10] 占用 ≈ 12(头) + 4(长度) + 10×4(数据) = 56 字节(已自然对齐)。
别把包装类当基本类型算
Integer、Long 等是对象,不是基本类型,内存远超对应基本类型:
-
int:仅 4 字节 -
Integer:对象头 12 字节 + value 字段 4 字节 + 对齐填充 ≈ 16 字节(64 位 JVM + 压缩指针) - 频繁装箱(如
for (Integer i = 0; i )会生成大量临时对象,加重 GC 压力
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










