Java基本类型无对象结构,栈中按类型宽度对齐存储,堆中作为字段嵌入对象实例数据区并经JVM重排以提升内存密度。
Java原始数据类型(即基本类型)不占用对象结构,它们的内存布局完全取决于声明位置和作用域,没有对象头、实例数据或对齐填充这些概念。
当作为方法内的局部变量或参数时,byte、short、int、long、float、double、char、boolean 直接存于当前线程的虚拟机栈中,每个变量占据固定字节数:
栈帧中局部变量表按槽(slot)组织,每个slot宽32位;long和double占两个连续slot,其余类型占一个。
当作为类的成员变量时,它们不再独立存在于栈,而是嵌入在对象实例数据区(Instance Data),随对象整体分配在堆中:
立即学习“Java免费学习笔记(深入)”;
byte a; int b;,实际内存布局可能是int b; byte a; padding;,以减少填充字节这种重排不是随意的,而是HotSpot默认按字段宽度降序排列,目的是提升内存密度和CPU缓存友好性。
Java语言规范未规定boolean大小,但主流JVM(如HotSpot)在栈中给它分配1字节,在堆中作为成员变量时也常按1字节处理(尽管可能被填充对齐);char始终是无符号16位Unicode码元,固定占2字节,无论在哪种上下文中。
int[]),整个数组对象在堆中,元素连续存储在实例数据区之后(紧随对象头和数组长度字段)基本类型不是对象,不经过new操作,不产生对象头、不参与GC标记、不涉及引用计数或可达性分析。它们的生命周期严格绑定于所在作用域:
这种轻量级设计正是基本类型高效的根本原因——它们就是内存里的一段原始比特,由JVM直接读写,不经过任何运行时元数据跳转。