程序计数器(PC Register)

  这里的计数器(Program Counter Register)并非为广义上所指的物理寄存器,JVM中的PC寄存器(程序计数器)是对物理PC寄存器的一种抽象模拟,相当于IDE中的光标索引值,行号,表示当前正在编辑的行号。

  PC寄存器用来存储指向下一条指令的地址,也就是即将执行的指令代码,由执行引擎读取下一条指令,特点:

  • 它是一块很小的内存空间,几乎可以忽略不记,他也是运行速度最快的存储区域。
  • 在JVM规范中,每个线程都有自己的程序计数器,是线程私有的,生命周期与线程周期保持一致。
  • 任何时间一个线程都只有一个方法在执行,也就是所说的当前方法,程序计数器会存储当前线程正在执行的Java方法的JVM指令地址。或者,如果是在执行native方法,则是未指定值(undefined)
  • 他是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都是需要依赖这个计数器来完成。
  • 字节码解释器工作时就是通过更改这个计数器的值来选取下一条需要执行的字节码指令。
  • 他是唯一一个在Java虚拟机规范中没有任何OutOfMomeryError (OOM)情况的区域。
  • 其实就是相当于一个索引。

常见问题:

Q:使用PC寄存器存储字节码指令地址有什么用?

A:因为CPU需要不停的切换各个线程,当切换回来的时候,需要知道从哪里接着执行。JVM的字节码解释器就需要通过更改PC寄存器的值来说明下一条应该执行什么样的字节码指令。

QPC寄存器为什么会被设置为线程私有?

A:因为CPU在进行执行程序的时候,是并发执行,即虽然有多个线程同时执行,但是CPU在一个特定的时间段内只会执行其中某一个线程的方法,即CPU在不停的切换任务,这样便会产生中断和恢复,为了能够准确记录各个线程正在执行的当前字节码指令地址,最好的办法就是为每一个线程都分配一个PC寄存器,这样便能够每个线程之间独立的运行而不会出现干扰

Q:并行、串行、并发的比较?

  • 并行:同时执行
  • 串行:一个接一个执行,一次执行完毕执行下一个
  • 并发:不断的切换,同时执行,但是每次只有一个在执行

附:JVM学习目录

运行时数据区--程序计数器(PC Register)的更多相关文章

  1. JVM运行时数据区--程序计数器

    JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息.CPU只有把数据装载到寄存器才能够运行.JVM中 ...

  2. JVM之运行时数据区

    Java虚拟机运行时数据区包括PC寄存器.Java虚拟机栈.Java堆.方法区.本地方法栈.运行时常量池六个部分. 1. PC寄存器 PC寄存器(又叫程序计数器,Program Counter Reg ...

  3. java虚拟机规范-运行时数据区

    前言 java虚拟机是java跨平台的基石,本文的描述以jdk7.0为准,其他版本可能会有一些微调. 引用 java虚拟机规范 数据类型 java总共有两种数据类型:基本类型和引用类型.java虚拟机 ...

  4. Java JVM运行时数据区,内存管理和GC垃圾回收

    一 . 运行时数据区 程序计数器是线程私有的,是一块很小的内存空间,是当前线程执行到字节码行号的计数指示器.每个CPU处理器核心 在任何一个时刻,都只可能运行着唯一的一个线程,执行着一条指令.所以在多 ...

  5. Java虚拟机运行时数据区

    运行时数据区程序计数器Java虚拟机栈本地方法栈Java堆(GC堆)方法区运行时常量池 运行时数据区 Java虚拟机在运行Java程序时,会将它所管理的内存划分为若干个内存区域.这些数据区域有各自的用 ...

  6. jvm入门及理解(三)——运行时数据区(程序计数器+本地方法栈)

    一.内存与线程 内存: 内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行.JVM内存布局规定了JAVA在运行过程中内存申请.分配.管理的策略,保证了JVM的 ...

  7. 【JVM第三篇--运行时数据区】程序计数器、虚拟机栈、本地方法栈

    写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.运行时数据区 我们在编写Java程序时,使用JVM的流程主要如下所示: 虚拟机在 ...

  8. Java虚拟机及运行时数据区

    1.Java虚拟机的定义 Java虚拟机(Java Virtual Machine),简称JVM.当我们说起Java虚拟机时,可能指的是如下三种不同的东西: 抽象的虚拟机规范 规范的具体实现 一个运行 ...

  9. Java运行时数据区

    目录 1. 概述 2. Java内存结构 3. 程序计数器 4. Java虚拟机栈 5. 本地方法栈 6. 堆 7. 方法区 8. 运行时常量池 9. 直接内存 10. 总结 1. 概述 作为日常的J ...

随机推荐

  1. python 计算文件md5值

    md5是一种常见不可逆加密算法,使用简单,计算速度快,在很多场景下都会用到,比如:给用户上传的文件命名,数据库中保存的用户密码,下载文件后检验文件是否正确等.下面讲解在python中如何使用md5算法 ...

  2. ElasticSearch生命周期管理-索引策略配置与操作

    概述 本文是在本人学习研究ElasticSearch的生命周期管理策略时,发现官方未提供中文文档,有的也是零零散散,此文主要是翻译官方文档Policy phases and actions模块. 注: ...

  3. javascript 查找属性的过程

     当执行 一个对象赋值操作的时候  js引擎会怎样处理呢??? 例如  有个foo对象  ,要进行这个操作 foo.a=2 1, 首先会在foo对象中查找,如果不存在a属性,就会去原型链上面找,如果原 ...

  4. CF1349A Orac and LCM 题解

    题意分析 给出$n$个数,求这$n$个数两两的最小公倍数的最大公约数 思路分析 通过分析样例可以发现,如果要成为这$n$个数两两的最小公倍数的公约数,至少要是这$n$个数中$n-1$个数的约数,否则就 ...

  5. lynx浏览器使用教程

    http://www.wocaoseo.com/thread-216-1-1.html LYNX浏览器是谷歌官方推荐的一款文本浏览器,主要用来模拟蜘蛛看到您页面时候的样子,谷歌在网站站长指南中提到: ...

  6. go语言之文件操作

    一: 相关的API 1func Create(name string) (file *File, err Error) 根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666 2 func ...

  7. e3mall商城的归纳总结4之图片服务器以及文本编辑器

    一.图片服务器 --1.认识图片服务器 大家可能都知道在分布式架构中使用图片上传可能会导致文件存放在某一个项目,而我们的项目基本上都采用集群的方式 ,因此这样会导致图片的问题比较难以存放,在这里我们有 ...

  8. 安装oracleXE快捷版(二)

    -bash-3.2$ 是oracle用户下的提示符 [root@localhost ~]# 是root用户下的提示符 #用root去修改oracle用户的密码123456[root@localhost ...

  9. Python中的协程,为什么说它的底层是生成器?

    我们曾经在golang关于goroutine的文章当中简单介绍过 协程 的概念,我们再来简单review一下.协程又称为是微线程,英文名是Coroutine.它和线程一样可以调度,但是不同的是线程的启 ...

  10. Selenium执行js脚本

    如何使用Selenium来执行Javascript脚本呢 Selenium中提供了一个方法:execute_script 来执行js脚本 return 可以返回js的返回结果 execute_scri ...