Java OOP对象模型核心由类、对象和引用三部分构成:类是模板与元数据容器,存于方法区;对象是堆中结构化内存,含对象头、实例数据和对齐填充;引用是操作对象的入口,HotSpot默认用直接指针。

Java 的 OOP 对象模型核心由三部分组成:类(Class)、对象(Object)和引用(Reference)。它们共同构成运行时的对象结构基础,不是语法糖,而是 JVM 层面真实存在的内存与逻辑机制。
类(Class)——对象的模板与元数据容器
类是对象的蓝图,但不止是代码结构。在 JVM 中,每个类加载后都会生成一个 Class 对象(存于方法区/元空间),记录字段、方法、继承关系、访问标志、常量池等元信息。它还负责类初始化()、反射支持和动态代理的基础能力。
- 字段定义决定对象实例的内存布局(按宽度排序,含对齐填充)
- 方法不存于对象体内,而通过类的虚方法表(vtable)或接口方法表(itable)间接调用
- 泛型在编译期擦除,运行时 Class 对象不保留泛型类型参数(但可通过
getGenericXxx方法部分还原)
对象(Object)——堆中的一块结构化内存
每次 new 创建对象,JVM 就在堆中分配一块连续内存,其实际结构包含三部分:
- 对象头(Header):含 Mark Word(存储哈希码、锁状态、GC 分代年龄、偏向线程 ID)和 Class Pointer(指向该对象所属 Class 对象的地址)
- 实例数据(Instance Data):按字段声明顺序 + JVM 优化重排后的实际字段值(如 int、boolean、引用等)
- 对齐填充(Padding):确保对象总大小为 8 字节整数倍(主流 HotSpot 要求),提升 CPU 缓存行读取效率
注意:数组对象额外多一个 长度字段(4 字节),放在对象头之后、实例数据之前。
立即学习“Java免费学习笔记(深入)”;
引用(Reference)——操作对象的唯一入口
Java 中的“变量”不直接存储对象,只保存一个 引用值,本质是 JVM 根据实现策略决定的指针或句柄。HotSpot 默认使用 直接指针 方式:引用中存的是对象在堆中的起始地址。这带来更快的访问速度,但也意味着 GC 移动对象时需更新所有引用。
- 局部变量、成员变量、静态变量、方法参数等,都属于引用类型变量
- null 表示引用未指向任何对象,不是对象,也不占堆内存
- 引用强度分四类(强、软、弱、虚),影响 GC 是否回收对应对象
基本上就这些。理解这三层关系,就能看懂 == 和 equals() 的区别、为什么子类对象能赋给父类引用、以及 Object.getClass() 返回什么——它们都扎根于这个底层对象模型。











