浅谈JVM

ⅰ亾dé卋堺 提交于 2019-12-25 17:32:41

【推荐】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组件中读取速度最快的单元。

欢迎关注公众号,后续文章更新通知,一起讨论技术问题 。

公众号二维码

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!