iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JVM中的程序计数寄存器PC是什么详解
  • 919
分享到

JVM中的程序计数寄存器PC是什么详解

2024-04-02 19:04:59 919人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、PC寄存器概述简单介绍二、PC寄存器的作用三、PC寄存器举例说明四、解决PC寄存器常问到的两个面试问题1、使用PC寄存器存储字节码指令地址有什么用呢?2、PC寄存器为什么会被

一、PC寄存器概述

在这里插入图片描述

CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。

简单介绍

1、 PC寄存器是一块很小的内存空间,几乎可以忽略不计,也是运行速度最快的存储区域。

2、 在JVM规范中,每个线程都有它自己的PC寄存器,是线程私有的,生命周期与线程的生命周期保持一致。

3、 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法,PC寄存器会存储当前线程的正在执行的Java方法的JVM指令地址;或者,如果是执行的native方法,则是未指定值。

4、 PC寄存器是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个寄存器来完成。

5、 字节码解释器工作时就是通过改变这个寄存器的值来选取下一条需要执行的字节码指令。

6、 PC寄存器是唯一 一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

注:方法区(元数据区)和堆区是有GC(垃圾回收)的,而栈区和PC寄存器是没有的;栈区、方法区、堆区是有OOM(OutOfMemoryError)的,而PC寄存器没有。

二、PC寄存器的作用

PC寄存器用来存储指向下一条指令的地址,即将要执行的指令代码。由执行引擎读取下一条指令。

在这里插入图片描述

每一个栈帧就相当于存储了一个方法,栈帧中的每一个指令都有一个标识,这里PC寄存器就存储了指令的地址,起标识作用,然后执行引擎就根据这个标识来读取到下一条指令。

三、PC寄存器举例说明


public class PcReGISterTest {
    public static void main(String[] args) {
        int i = 10;
        int j = 5;
        int k = i+j;
    }
}

这里我们运行编译下这段代码,然后在进入到out对应的目录下执行javap命令:

在这里插入图片描述

我们就可以看到反编译的一个结果:

在这里插入图片描述

上图红色框里的数字就是指令地址或者偏移地址,其就是PC寄存器里面存储的地址。蓝色框里的就是操作指令。然后执行引擎就根据这个指令地址取出指定的操作指令来操作虚拟机栈(局部变量表、操作数表),并且翻译成机器指令,让CPU对相应的计算。

四、解决PC寄存器常问到的两个面试问题

1、使用PC寄存器存储字节码指令地址有什么用呢?

(为什么使用PC寄存器记录当前线程的执行地址呢?)

在这里插入图片描述

因为CPU需要不停的切换各个线程,这时候切换回来后,就得知道是从哪个指令开始继续执行。JVM的字节码解释器就需要通过改变PC寄存器的值来明确下一条应该执行什么样的字节码按指令。

2、PC寄存器为什么会被设定为线程私有的,一个线程一份?

我们都知道所谓的多线程在一个特定的时间段内只会执行其中某一个线程的方法,CPU会不停地做任务切换,这样必然导致经常中断或恢复,如何保证分毫无差呢?

1.为了能够准确地记录各个线程正在执行的当前字节码指令地址,最好的办法自然是为每一个线程都分配一个PC寄存器,这样一来各个线程之间便可以进行独立计算,从而不会出现相互干扰的情况。

2.由于CPU时间片轮限制,众多线程在并发执行过程中,任何一个确定的时刻,一个处理器或者多核处理器中的一个内核,只会执行某个线程中的一条指令。

3.这样必然导致经常中断或恢复,如何保证分毫无差呢?每个线程在创建后,都会产生自己的程序计数器和栈帧,程序计数器在各个线程之间互不影响。

五、CPU时间片

CPU时间片: 即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片。

在宏观上: 我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。

但在微观上: 由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

总的来说,我们用一句话来概括:宏观并行,微观并发。

简单图示:

PC寄存器就到这里以上就是JVM中的程序计数寄存器PC原理分析的详细内容,更多关于JVM程序计数寄存器PC原理的资料请关注编程网其它相关文章!

--结束END--

本文标题: JVM中的程序计数寄存器PC是什么详解

本文链接: https://www.lsjlt.com/news/136899.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JVM中的程序计数寄存器PC是什么详解
    目录一、PC寄存器概述简单介绍二、PC寄存器的作用三、PC寄存器举例说明四、解决PC寄存器常问到的两个面试问题1、使用PC寄存器存储字节码指令地址有什么用呢?2、PC寄存器为什么会被...
    99+
    2024-04-02
  • JVM用寄存器实现程序计数
    目录1.PC 寄存器介绍2.PC 寄存器的作用3.代码示例4.两个常见面试题5.CPU时间片官网链接 1.PC 寄存器介绍 JVM中的程序计数寄存器(Program Counte...
    99+
    2023-02-16
    JVM程序计数器 JVM寄存器
  • 计算机中解释程序指的是什么
    这篇文章主要介绍计算机中解释程序指的是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!解释程序是一种语言处理程序,在运行用户程序时,可以直接执行源程序或源程序的内部形式(中间代码)。解释程序的优点是:结构简单,易于...
    99+
    2023-06-14
  • node.js中PC端微信小程序包解密的处理方法是什么
    这篇文章主要介绍“node.js中PC端微信小程序包解密的处理方法是什么”,在日常操作中,相信很多人在node.js中PC端微信小程序包解密的处理方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”nod...
    99+
    2023-06-25
  • css中的计数器是什么
    这篇文章给大家分享的是有关css中的计数器是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   css计数器是什么?   计数器是css3提供的一个强大的工具,是一种可以...
    99+
    2024-04-02
  • 详解Java程序启动时-D指定参数是什么
    目录参数设置参数获取测试类总结 参数设置 java程序启动参数 -D是用来做什么的呢? 官方解释如下: Set a system property value. If va...
    99+
    2022-12-26
    java -D参数 java启动参数-d javac -d参数的用途
  • 计算机中用来存放程序和数据的部件是哪个
    本文小编为大家详细介绍“计算机中用来存放程序和数据的部件是哪个”,内容详细,步骤清晰,细节处理妥当,希望这篇“计算机中用来存放程序和数据的部件是哪个”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。计算机中用来存放程...
    99+
    2023-07-02
  • 详解Golang Map中的key为什么是无序的
    目录一、为什么是无序的?二、GO 为什么要这么做?三、遍历是否真的无序的1.第一次遍历2.第二次遍历四、如何才能得到有序的键值对总结一、为什么是无序的? 开门见山,先上源码 func...
    99+
    2024-04-02
  • 计算机网络中源程序、目标程序、可执行程序的含义是什么
    这篇文章给大家分享的是有关计算机网络中源程序、目标程序、可执行程序的含义是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。源程序:指未编译的,按照一定的程序设计语言规范书写的文本文件。目标程序:指源程序经编译可...
    99+
    2023-06-14
  • 计算机中一个c程序的执行是从什么函数开始
    小编给大家分享一下计算机中一个c程序的执行是从什么函数开始,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一个c程序的执行是从本程序的main函数开始,到main函...
    99+
    2023-06-14
  • Linux操作系统中Shell程序设计是什么样的
    这篇文章将为大家详细讲解有关Linux操作系统中Shell程序设计是什么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Shell是种命令解释程序,也可以看作是一种命令语言的解释器。 用户...
    99+
    2023-06-05
  • mysql数据库中的存储过程是什么
    这篇文章给大家分享的是有关mysql数据库中的存储过程是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语...
    99+
    2024-04-02
  • mysql中存储过程和存储函数指的是什么
    小编给大家分享一下mysql中存储过程和存储函数指的是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!在mysql中,存储过程和存储函数都是数据库中定义的一些SQL语句的集合。其中,存储函数...
    99+
    2024-04-02
  • Linux容器中的PHP应用程序:存储最佳实践是什么?
    随着容器技术的不断发展,越来越多的企业和个人开始使用容器来部署和管理应用程序。而PHP作为一种广泛使用的编程语言,也逐渐成为了容器中的常见应用之一。但是,在使用PHP应用程序部署到容器中时,存储的最佳实践是什么呢?本文将介绍一些关于在Li...
    99+
    2023-07-10
    linux 容器 存储
  • 存储ASP应用程序数据的最佳实践是什么?
    在ASP应用程序中,数据的存储是非常重要的,因为它决定了应用程序的性能和可靠性。ASP应用程序可以使用多种方法来存储数据,包括文件系统、数据库和内存缓存。在本文中,我们将讨论存储ASP应用程序数据的最佳实践。 一、使用文件系统进行数据存储...
    99+
    2023-08-04
    存储 异步编程 npm
  • 计算机程序中断处理过程的五个阶段是什么
    小编给大家分享一下计算机程序中断处理过程的五个阶段是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!中断处理过程的五个阶段:1、中断请求阶段;2、中断判优阶段,有硬件判优和软件判优两种方法;3、中断响应阶段,CPU向中断...
    99+
    2023-06-14
  • oracle中存储函数与存储过程的区别是什么
    这期内容当中小编将会给大家带来有关oracle中存储函数与存储过程的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一:存储过程:简单来说就是有名字的pl/sql...
    99+
    2024-04-02
  • 计算机中采用虚拟存储器的目的是什么
    这篇文章将为大家详细讲解有关计算机中采用虚拟存储器的目的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。采用虚拟存储器的目的是:扩大内存的容量(即寻址空间)。 一般而言,计算机的RAM容量越大,程序运...
    99+
    2023-06-06
  • PHP应用程序在Linux容器中使用存储的挑战是什么?
    随着云计算的兴起,容器化技术也变得越来越流行。Linux容器是一种轻量级的虚拟化技术,可以提供与传统虚拟机相同的隔离性和安全性,但是可以更快速地部署和管理应用程序。在容器中运行PHP应用程序可以使开发人员更加灵活和高效。然而,将PHP应用...
    99+
    2023-07-10
    linux 容器 存储
  • MySQL中的视图、存储函数、存储过程、触发器分别是什么
    这篇文章主要讲解了“MySQL中的视图、存储函数、存储过程、触发器分别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中的视图、存储函数、存储过程、触发器分别是什么”吧!目录一...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作