一、JVM内存区域划分

360b8f453e016cb641208a6a8fb589bc.png

1、线程私有

程序计数器

存储当前线程正在执行的 Java 方法的 JVM 指令地址

虚拟机栈

每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的 Java 方法调用。

本地方法栈

支持对本地方法的调用,也是每个线程都会创建一个。

2、线程共享

Java 对象实例

方法区

存储原信息,类似:类结构信息,以及对应的运行时常量池、字段、方法代码等

二、OOM

除了程序计数器,其他区域都可能出现OOM。

三、StackOverFlow

虚拟机栈的深度超过-Xss设置的最大深度,会导致栈溢出。