JVM之程序计数器

数据运行时数据区域

Java虚拟机在执行Java程序过程中会将它管理的内存分成若干个不同的数据区域,不同的数据区域用途不同,内存的管理(创建和销毁)不同,如下图是Java虚拟机中数据的区域模型图。

图1-1 Java 虚拟机运行时数据区

程序计数器

程序计数器(Program Counter Register)是一块比较小的内存空间,通过改变计数器的值来选取下一条需要执行的字节码指令,是程序控制流的指示器,分支、循环、跳转、异常、线程恢复等基础功能都是需要依赖计数器来完成。每条线程都是有一个独立的程序计数器,线程之前互相没有影响,这样在多线程中可以很容易的管理每个线程需要执行的下一个代码是什么(字节码指令)。如果线程正在执行Java方法,则计数器记录的是正在执行的虚拟机字节码指令的地址;如果执行的是本地方法,则计数器的值为空(Undefined)。程序计数器是唯一一个不会发生OutOfMemoryError的内存区域。

总结:
  1. 程序计数器是线程私有的内存空间,主要记录线程需要执行的下一个字节码指令地址,不会发生OOM
  2. 线程执行本地方法时,计数器记录的值为空
  3. 内存的生命周期是伴随着线程的创建而创建,销毁而销毁,而且占用空间非常小
思考:
  1. 是如何保障顺序的,也就是字节码指令执行前就记录下一条?还是执行完再记录下一条指令地址。
    A:首先程序计数器记录的是当前执行的指令地址,程序计数器其实不保证整个代码的顺序,一个线程的代码执行顺序使用通过栈的数据结构来控制的。
  2. 如何保障一致性,记录的字节码指令是否真的执行成功,执行失败怎么办
  3. 在执行本地方法时计数器的值是空,为什么

引用

  1. 《深入理解Java虚拟·JVM高级特性与最佳实践 第3版》周志明
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天跟大家聊聊较为底层的东西。也是作为一个Java开发必备的知识点。JVM虚拟机的结构划分。 相比大家都背的滚瓜烂...
    cnJason阅读 11,004评论 3 2
  • 今天突然在思考一个问题,jvm内存模型中的PC程序计数器和OS操作系统程序计数器有没有关系,是不是对应的,在网上查...
    就很Nice阅读 4,949评论 0 0
  • 一、概念多线程的Java应用程序:为了让每个线程正常工作就提出了程序计数器(Programe Counter Re...
    编程界的小学生阅读 9,001评论 2 7
  • 程序计数器(PC寄存器/Program Counter Register) PC寄存器用来存储指向下一条指令的地址...
    lc_666阅读 2,860评论 0 0
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 127,473评论 2 7

友情链接更多精彩内容