2. JVM 运行时数据区域

1. 程序计数器

  • 可以看作是当前线程所执行的字节码的行号指示器
  • 分支、循环、跳转、异常处理、线程恢复等都需要依赖该计数器
  • 每个线程都有一个独立的、互不干扰的计数器

2. 虚拟机栈

  • 线程私有,生命周期与线程相同
  • 每一个方法调用直至完成,对应着一个栈帧入栈到出栈
  • 两个关键异常
    • 当前虚拟机使用固定长度的虚拟机栈时,若请求的栈深度大于虚拟机所允许的深度会抛出StackOverFlowError
    • 当前虚拟机使用动态长度的虚拟机栈时,若扩展时无法申请到足够的内存会抛出OutOfMemoryError

3. 本地方法栈

类似虚拟机栈

4. Java 堆

  • 本质就是存放对象的地方
  • 当堆无法扩展以完成实例的分配时,就会抛出OutOfMemoryError

5. 方法区

  • 仅在 HotSpot 虚拟机中,方法区是以永久代的形式实现的

你可能感兴趣的:(2. JVM 运行时数据区域)