1. 因为Java是多线程的,意味着线程需要切换,我要确保我的jvm能够正常的运行,所以我需要程序计数器用来记录当前线程或者当前正在执行的线程的一个代码的地址(行号),记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。
每个线程都需有独立的一个程序计数器,不同线程之间的程序计数器互不影响,独立存储。
2. 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、循环、异常处理。
注意:如果线程执行的是个java方法,那么计数器记录虚拟机字节码指令的地址。如果为native【底层方法】,那么计数器为空。这块内存区域是虚拟机规范中唯一没有OutOfMemoryError的区域。