程序计数器
可看做当前线程所执行的字节码的行号指示器
虚拟机栈
它的功能就是为Java虚拟机执行Java方法(字节码服务),我们常说的栈指的就是虚拟机栈, 或者说是虚拟机栈中对的局部变量表部分。 栈中存放了编译器可知的八种基本数据类型(byte,char,short,int,long,double,float,boolean) 以及对象引用(对象引用不等同对象本身,可能是指向对象起始地址的引用指针)。 栈的生命周期与线程相同,每个方法在执行的同事都会创建一个栈帧(栈帧是用来存储局部变量表,操作数栈, 动态链接以及方法出口等) 通过配置-Xss参数来设置栈容量大小。
本地方法栈
为虚拟机执行native方法服务。 虚拟机栈与本地方法栈会抛出两种异常: ①如果线程请求的深度大于虚拟机所允许的深度,将抛出StackOverflowError异常 ②如果虚拟机栈可以动态扩展,扩展时无法申请到足够的内存,则会抛出OutOfMemoryError异常