开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情
java-jvm之内存区域
jvm内存主要包含程序计数器、虚拟机栈、本地方法栈、方法区、Java堆、直接内存等区域。
- 线程私有
-
- 程序计数器:指向虚拟机字节码指令的位置、唯一一个无内存溢出的区域
-
- 虚拟机栈
-
-
- 为Java方法服务
-
-
-
- 虚拟机栈和线程的生命周期相同
-
-
-
- 每一个线程调用一个方法就会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息
-
-
-
- 栈帧:本地变量表、操作数栈、运行时常量引用
-
-
-
- 异常情况:线程请求栈帧深度大于jvm允许深度、无法申请到足够内存
-
-
- 本地方法栈
-
-
- 为native方法服务
-
-
-
- 异常情况:线程请求栈帧深度大于jvm允许深度、无法申请到足够内存
-
- 线程共享
-
- 方法区(永久代):运行时常量池
-
- 类实例区(Java堆):新生代(Eden、servivorFrom、servivorTo)、老年代、异常
- 直接内存:不受jvm垃圾回收管理
复制算法步骤
- Eden、servivorFrom存活的对象复制到servivorTo区域,年龄+1
- 清空Eden、servivorFrom中的对象
- servivorTo和servivorFrom互换
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情