1. 程序计数器
- 可以看作是当前线程所执行的字节码的行号指示器
- 分支、循环、跳转、异常处理、线程恢复等都需要依赖该计数器
- 每个线程都有一个独立的、互不干扰的计数器
2. 虚拟机栈
- 线程私有,生命周期与线程相同
- 每一个方法调用直至完成,对应着一个栈帧入栈到出栈
- 两个关键异常
- 当前虚拟机使用固定长度的虚拟机栈时,若请求的栈深度大于虚拟机所允许的深度会抛出
StackOverFlowError
- 当前虚拟机使用动态长度的虚拟机栈时,若扩展时无法申请到足够的内存会抛出
OutOfMemoryError
- 当前虚拟机使用固定长度的虚拟机栈时,若请求的栈深度大于虚拟机所允许的深度会抛出
3. 本地方法栈
类似虚拟机栈
4. Java 堆
- 本质就是存放对象的地方
- 当堆无法扩展以完成实例的分配时,就会抛出
OutOfMemoryError
5. 方法区
- 仅在 HotSpot 虚拟机中,方法区是以永久代的形式实现的