1. 线程私有
1.1. 程序计数器-pc 寄存器
每个jvm线程都有⾃己的pc 计数器
线程执⾏到的字节码的行号指示器,只要不是native方法, ⽤于执行过程中的循环、跳转、分⽀支、异常处理理线程恢复等。
⽣命周期与线程相同
1.2. 虚拟机栈- stack
描述的是⽅法执行的内存模型,⽅法的执行过程就是虚拟机栈的入栈与出栈
用于存储局部变量和部分过程结果(些尚未算好的结果)的数据结构。
也被用来处理动态链接、方法返回值和异常分派。
生命周期与JVM线程相同,⽅法执⾏时都会创建⼀个栈帧。
随着⽅法调⽤而创建,随着方法结束(⽆论正常还是异常完成)而销毁。
局部变量表和操作数栈都是在编译期确定,在方法的code属性中。
1.2.1. 局部变量表
存放在编译时已经确定的8种基本类型、对象引用等。空间⼤小是确定的,
在运行期间不会改变。
⽅法参数和局部变量
局部变量 没有 初始化阶段,即不会被赋零值。
1.2.2.操作数栈
类似于数据寄存器
方法开始执行时是空的, 运算过程中会有出栈入栈操作。
1.3. 本地方法栈⽤
用来⽀持native⽅法执⾏
native关键字说明其修的⽅法是一个原⽣态方法,方法对应的实现不是在当前文件,⽽是在⽤其他语⾔(如C和C++)实现的文件中
2. 线程共享
2.1. 方法区