程序私有内存
每个线程都有,彼此之间完全隔离
1、程序计数器
程序计数器是六块内存中比较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器
若当前线程执行的是java方法,计数器记录的是正在执行的JVM字节码指令地址
若当前线程执行的是Native方法,计数器值为空
程序计数器是唯一一块不会产生OOM异常的区域
2、本地方法栈
本地方法(native方法)执行的内存模型
HotSpot虚拟机中,本地方法栈与虚拟机栈是同一块内存区域
3、虚拟机栈
虚拟机栈描述Java方法执行的内存模型
每个方法执行的同时都会创建一个栈帧存储局部变量表、操作数栈、方法出口等信息
每个方法从调用直到执行完毕的过程,对应一个栈帧在虚拟机栈的入栈与出栈过程
生命周期与线程相同:在创建线程同时创建此线程的虚拟机栈,线程执行结束,虚拟机栈与线程一同被回收
此区域会产生两种异常:
1)若线程请求的栈深度大于JVM允许的深度(-Xss设置栈容量),抛出StackOverFlowError异常(单线程)
2)虚拟机在进行栈的动态扩展时,若无法申请到足够内存,抛出OOM(OutOfMemoryError)异常(多线程)
程序共享内存
所有线程共享此内存空