特点:

  • 运行时数据区中唯一不会出现OOM的区域,没有垃圾回收。
  • 每个线程有一个私有的程序计数器,线程之间互不影响。
  • 程序计数器会存储当前线程正在执行的Java方法的 JVM指令地址,为了线程切换后能恢复到正确的位置。
  • 如果正在执行的本地方法,这个计数器值则应为空。(undefined)

 

(面试常问)使用PC寄存器存储字节码指令地址有什么用?

(面试常问)为什么使用PC寄存器记录当前线程的执行地址呢?

 

记录下一条字节码执行的指令,实现分支循环跳转、异常处理、线程恢复等功能。因为线程是一个个的顺序执行流,CPU需要不停的切换各个线程,这时候切换回来以后,就得知道接着从哪开始继续执行。

(面试常问)PC寄存器为什么被设定为私有的?

  • CPU,多线程,分配时间片,只执行一个线程,CPU任务切换,线程中断恢复
  • 各个线程、PC寄存器记录、当前字节码指令地址,各个线程之间可进行独立计算,防止相互干扰