内存模型与内存区域
核心概念
运行时数据区
1. 程序计数器(Program Counter Register)
2. Java 虚拟机栈(JVM Stack)
栈帧结构
┌─────────────────────────┐
│ 栈帧 │
├─────────────────────────┤
│ 局部变量表 │ ← 存放方法参数和局部变量
│ (Local Variable Table) │ 基本类型直接存值
│ │ 引用类型存指针
├─────────────────────────┤
│ 操作数栈 │ ← 字节码指令的操作空间
│ (Operand Stack) │ 类似 CPU 的寄存器
├─────────────────────────┤
│ 动态链接 │ ← 指向运行时常量池的
│ (Dynamic Linking) │ 方法引用
├─────────────────────────┤
│ 方法返回地址 │ ← 方法正常/异常退出
│ (Return Address) │ 返回的位置
└─────────────────────────┘异常情况
3. 本地方法栈(Native Method Stack)
4. Java 堆(Heap)⭐⭐⭐⭐⭐
堆内存结构(分代)
JVM 参数
堆内存 OOM
5. 方法区(Method Area)
实现演变
JDK 版本
实现方式
存储位置
为什么用元空间替换永久代
元空间参数
6. 运行时常量池(Runtime Constant Pool)
7. 直接内存(Direct Memory)
对象的创建过程
对象的内存布局
对象头(Object Header)
实例数据(Instance Data)
对齐填充(Padding)
对象的访问定位
句柄访问
直接指针(HotSpot 使用)
面试要点
高频问题
常见陷阱
参考资料
Last updated