运行时内存

JAVA内存区域及使用分配-实战JVM(一)

Deadly 提交于 2019-11-28 22:50:57
JAVA虚拟机运行时会将JVM使用的内存划分为不同的区域,每个区域负责不同的功能,以及各个区域的创建,销毁都各不相同。 下图是JVM运行时内存数据区的划分, 图1、JVM运行时数据区 1、程序计数器 每个线程都拥有一个独立的程序计数器,用于记录当前线程所要执行的字节码指令,该类内存区域为“线程私有”内存。 2、虚拟机栈 该区域也有人称为栈内存(对应java堆内存),这个叫法不完全正确,但可以便于理解。 该区域也是线程私有的,并且与线程的生命周期相同。 主要负责 方法执行 的内存部分,在每个方法执行时都会创建一个栈针存储局部变量,操作数等方法相关信息,每一次方法的调用到完成,都对应一个栈针在虚拟机栈中出入栈的过程。 该区域会抛出stackOverFlowError和OutOfMemoryError错误 stackOverFlowError 是线程请求的栈深度大于虚拟机允许的深度,如下面的代码 public static void main(String[] args) { testStackOverFlow(); } public static void testStackOverFlow(){ System.out.println("stackOverFLow"); testStackOverFlow(); } OutOfMemoryError错误就是栈空间溢出,比如局部变量过多