一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情。
内部结构
- 程序计数器
- 虚拟机栈
- 本地方法栈
- 堆
- 方法区
程序计数器
作用:记录下一条JVM指令的地址。 寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。
特点:线程私有,不会存在内存溢出
经典面试题
为什么要使用PC寄存器来记录当前线程的执行地址呢?
- 因为CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行
- JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码指令
PC寄存器为什么被设定为私有的?
在多线程的场景下,每个线程都会去执行自己所对应的代码,CPU会不断的任务方法切换,这样会导致经常中断或恢复,为了能够准确地记录各个线程正在执行的当前字节码指令地址,最好的办法自然是为每一个线程都分配一个PC寄存器,这样设计的答案 解决了每个线程之间可以独立计算运行,从而不会出现相互干扰的情况。
由于CPU时间片轮限制,众多线程在并发执行过程中,任何一个确定的时刻,一个处理器或者多核处理器中的一个内核,只会执行某个线程中的一条指令。
CPU时间片
作用:CPU时间片会给每个程序的时间,每个线程被分配一个时间段,称作它的时间片。
但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。