运行时数据区(Runtime Data Area)
运行时数据区分为以下几个区域,按属性可以分为以下两类:属于进程(生命周期与进程相同,线程共享),属于线程(生命周期与线程相同,线程私有)
属于进程的有堆(Heap)和方法区(Method Area)。属于线程的有程序计数寄存器(Program Counter Register),Java栈(Java Virtual Machine Stack)以及本地方法栈(Native Method Stack)。
这里需要注意的有,并不是说堆中全是线程共享,还有本地线程分配缓存(简称TLAB 全写Thread Local Allocation Buffer)是线程私有的,只不过在默认情况下占堆的1%。方法区只是一个概念,需要永久代(JDK1.7及以前)或元空间(JDK1.8及以后)具体实现。
PC寄存器(Program Counter Register)
PC寄存器也叫程序计数器,对于PC寄存器这个名字,可能有人会误以为这是一个寄存器,但事实上PC寄存器是对物理PC寄存器的一种抽象模拟,PC寄存器中存储的是下一条指令的地址,执行引擎(Execution Engine)根据PC寄存器将指令转化为机器语言。对于每个线程来说,需要执行的下一条指令的地址是不同的,在CPU快速切换的过程中,线程需要保存下一条指令的位置以便于下次CPU再次切换回来时继续执行,因此PC寄存器需要线程私有。这种一个CPU通过快速切换多个程序看似同时执行称为并发,与并行不同,可以将并发看作一对多的模式,将并行看作多对多的模式。
1002

被折叠的 条评论
为什么被折叠?



