【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
1.1 定义
Program Counter Register 程序计数器(寄存器)
-
定义:当前线程所执行的字节码的行号指示器,记住下一条执行
JVM
指令的地址 -
特点
-
线程私有的
多个线程运行同一套代码时,CPU会有一个调度器组件为不同线程分配时间片,在时间片内线程未执行完成就会将运行状态暂存,再切换到其他线程执行,如此循环执行。而程序计数器就是线程运行状态暂存的区域,在线程切换时,会记录该线程的下一条JVM指令的地址。
-
JVM
规范中唯一一个不会存在内存溢出的区域
-
1.2 作用
示例代码
0: getstatic #20 // PrintStream out = System.out;
3: astore_1 // --
4: aload_1 // out.println(1);
5: iconst_1 // --
6: invokevirtual #26 // --
9: aload_1 // out.println(2);
10: iconst_2 // --
11: invokevirtual #26 // --
14: aload_1 // out.println(3);
15: iconst_3 // --
16: invokevirtual #26 // --
19: aload_1 // out.println(4);
20: iconst_4 // --
21: invokevirtual #26 // --
24: aload_1 // out.println(5);
25: iconst_5 // --
26: invokevirtual #26 // --
29: return
-
右侧为
java
源代码,左侧为编译后的字节码指令,也就是jvm
指令,在任何平台下编译后都是这套指令。这套指令并无法直接交给CPU执行,需要由JVM
的解释器转换成机器码,再交由CPU执行。 -
程序计数器的作用就是记住下一条
JVM
指令的地址,左侧的数字即为JVM
指令地址。 -
解释器每次都会从程序计数器中获取需要执行的
JVM
指令,同时下一条JVM
指令将会存入程序计数器中。 -
程序计数器物理上的实现就是依靠寄存器来存储和读取指令地址,寄存器是
CPU
组件中读取速度最快的单元。
欢迎关注公众号,后续文章更新通知,一起讨论技术问题 。
来源:oschina
链接:https://my.oschina.net/u/3179064/blog/3147323