java虚拟机栈分为
(1)局部变量表
方法参数和局部变量的存放区域 相对于类变量的初始化和准备阶段
必须显示初始化
(2)操作栈
是方法执行过程中各种指令栈中写入和读取信息
(3)动态链接
每个栈帧包含一个常量池对当前方法的引用,目的支持在方法调用过程中动态链接
(4)方法返回地址
1.正常退出
return返回地址
2.异常退出
返回值压入栈上层调用栈帧
异常信息能够处理的栈帧
PC计数器方法调用后下一条指令
本地方法栈
针对的是Native方法来说的线程调用本地方法时会进入不受jvm约束时刻
本地方法可以通过jni来访问jvm运行时数据甚至通用寄存器
程序计数器
CPU只有把数据装载到寄存器上才能够运行,由于cpu的时间片机制,任何一个时刻不管是多核还是单核处理器每个核数上只能有一个指令执行,异常发生如何恢复呢,这时候就需要每个线程有自己的程序计数器和栈帧程序计数器用来放置指令行数和偏移量线程执行和恢复都需要这些信息