Java内存模型
PC程序计数器
- 每个线程会对应一个Java栈;
- 各个线程的程序计数器是线程私有的,互不影响,是线程安全;
- 程序计数器记录线程正在执行的内存地址,以便被中断线程恢复执行时再次按照中断时的指令地址继续执行;
Java栈JavaStack(虚拟机栈JVM Stack)
- 每个线程会对应一个Java栈;
- 每个Java栈由若干栈帧组成;
- 每个方法对应一个栈帧;
- 栈帧在方法运行时,创建并入栈;方法执行完,该栈帧弹出栈中的元素作为该方法返回值,该栈帧被清除;
- 栈顶的栈帧叫做活动站栈,表示当前执行的方法,才可以被CPU执行
- 线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常;
- 栈扩展时无法申请到足够的内存,就会抛出OutMemoryError异常