全国统一服务热线

156-5938-3239

新闻中心

当前位置:首页>新闻中心

Java中的线程私有区域分析

在HotspotVM中,每个线程直接映射到操作系统的本地线程,因此这部分内存区域的存/否遵循本地线程的生成/失效。

线程私有数据区域的生命周期与线程相同,它依赖于用户线程的启动/结束来创建/销毁(在HotspotVM中,每个线程直接映射到操作系统的本地线程,因此这部分内存区域的存/否遵循本地线程的生成/失效)。

1.Native Method Stack本地方法栈

当执行Execution Engine时,是在Native Method Stack中登记nativelibraies的值。

2.PCRegister程序计数器

每一个线程都有一个程序计算器,即一个指针,指向方法区域中的方法字节码(下一条指令代码),执行引擎会读取下一条指令,它所占用的内存空间非常小,几乎可以忽略不记。

“作用”是当前线程执行的字节码的行号指示符(类似于传统CPU模式中的PC),每次指令执行后,PC会自动增加,维护下一条指令的地址.在JVM模型中,字节码解释器是通过改变PC值来选择下一条需要执行的字节码指令,如分支、循环、跳转、异常处理、线程恢复等基本功能都需要依靠PC来完成(仅限于Java方法,Native方法该计数器值为undefined)。

与以进程为单位调度不同的是,JVM中的并发操作是通过线程切换和分配执行时间片来实现的.在任何时刻,一个处理器内核只执行一条指令.因此,在切换线程之后,为了恢复正确的执行位置,每条线程都需要一个独立的程序计数器,这种内存称为“线程专用”内存。

3.JavaStack(虚拟机栈)

栈名亦称栈内存,它在创建线程时创建Java程序,其生命周期是与线程结束栈内存一起被释放的,对于线程结束栈内存来说,只要线程结束栈内存就会被释放,对栈来说只要Over就Over生命周期和线程一致。

在函数的栈内存中分配基本类型的变量和引用对象的引用变量。

在栈框架中主要包含3类数据:

局部变量(LocalVariables):方法中的输入、输出参数和变量;

堆栈操作(OperandStack):记录栈、入栈操作;

栈框架数据(FrameData):包括类文件、方法等。

堆栈操作原理

栈帧(StackFrame)是一种存储块,栈帧是一个内存区块,是一个数据集,是一个有关方法和运行期数据的数据集,当一个方法A被调用时就产生了一个栈帧F1,并被压入到栈中,A方法又调用了B方法,于是产生栈帧F2也被压入栈,B方法又调用了C方法,于是产生栈帧F3也被压入栈……依次执行完毕后,先弹出后进......F3栈帧,再弹出F2栈帧,再弹出F1栈帧。


QQ咨询
在线咨询
在线报名
156-5938-3239
156-5938-3239
返回顶部