JVM内存划分详解
JVM内存划分详解
JVM内存区域
程序计数器
- 记录当前线程执行的字节码行号
- 线程私有,各线程独立计数
- 唯一不会OOM的区域
虚拟机栈
- 描述Java方法执行的内存模型
- 每个方法创建一个栈帧
- 包含:局部变量表、操作数栈、动态链接、方法返回地址
1 | // 栈深度过深会抛出StackOverflowError |
本地方法栈
- 为Native方法服务
- 与虚拟机栈类似
堆
- 最大内存区域
- 存放对象实例
- 垃圾回收主要区域
- 分代:新生代、老年代
方法区
- 存储类信息、静态变量、常量
- JVM规范中的”永久代”
- JDK 8后用元空间替代
内存分配
- 对象优先在Eden区分配
- 大对象直接进入老年代
- 长期存活对象进入老年代
总结
理解JVM内存划分是调优基础,不同区域有不同的存储内容和垃圾回收策略。