浅谈JVM - 内存结构(二)- 程序计数器

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

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

公众号二维码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值