java-jvm之内存区域

77 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情

java-jvm之内存区域

jvm内存主要包含程序计数器、虚拟机栈、本地方法栈、方法区、Java堆、直接内存等区域。

  • 线程私有
    • 程序计数器:指向虚拟机字节码指令的位置、唯一一个无内存溢出的区域
    • 虚拟机栈
      • 为Java方法服务
      • 虚拟机栈和线程的生命周期相同
      • 每一个线程调用一个方法就会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息
      • 栈帧:本地变量表、操作数栈、运行时常量引用
      • 异常情况:线程请求栈帧深度大于jvm允许深度、无法申请到足够内存
    • 本地方法栈
      • 为native方法服务
      • 异常情况:线程请求栈帧深度大于jvm允许深度、无法申请到足够内存
  • 线程共享
    • 方法区(永久代):运行时常量池
    • 类实例区(Java堆):新生代(Eden、servivorFrom、servivorTo)、老年代、异常
  • 直接内存:不受jvm垃圾回收管理

复制算法步骤

  1. Eden、servivorFrom存活的对象复制到servivorTo区域,年龄+1
  2. 清空Eden、servivorFrom中的对象
  3. servivorTo和servivorFrom互换

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 7 天,点击查看活动详情