- 程序计数器是jvm运行时数据区里最小的一块内存区域,几乎可以忽略不计,也是运行速度最快的一块区域
- 程序计数器是在jvm规范中唯一一块不会出现OutOfMemoryError的区域
- 程序计数器用来记录下一条要执行指令的地址,如果当前方法时native方法则程序计数器记录为null。由执行引擎修改
- 程序计数器每个线程一个
- 问:为什么程序计数器线程独立,每个线程都有一个?
答:java是支持多线程的语言,程序计数器存在的很重要的一个原因是当线程上下文切换时记录当前线程将要执行的指令地址,防止线程切换回来时不知道上次执行的位置。每个线程一个可以做到线程间互不影响。 - 问:为什么执行native方法时程序计数器记录值为null?那native代码执行时在哪里记录当前线程的将要执行的指令地址?
答:程序计数器是抽象在java虚拟机层面的一个概念专门用来储存java代码的指令地址,而native不是java代码所以当执行native代码时程序计数器没有记录的意义可以是任何值。native代码的执行由操作系统原生平台掌控,native将要执行的指令地址由原生CUP上真正的PC寄存器记录。