程序计数器

article/2025/8/23 13:20:50

一 程序计数器概念
程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现)1.字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、2.线程恢复等基础功能都需要依赖这个计数器来完成。- - 摘自《深入理解Java虚拟机》

程序计数器是一块较小的内存空间,可以把它看做当前线程正在执行的字节码的行号指示器.也就是说,程序计数器里面记录的是当前线程正在执行的那一条字节码执行的地址.如果当前线程正在执行的是一个本地方法,那么此时程序计数器为空.(本地方法是保存在动态链接库中)

由于java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存

如果线程正在执行一个java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,这个计数器为空(undefined)。此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。

通俗解释

对于一个运行中的java程序而言,其中的每一个线程都有他自己的PC(程序计数器)寄存器,他是在该线程启动时创建的,PC寄存器的大小是一个字长,因此它既能够持有一个本地指针,也能持有一个returnAddress(returnAddress类型会被java虚拟机的jsr、ret和jsr_w指令所使用。returnAddress类型的值指向一条虚拟机指令的操作码。与前面介绍的那些数值类的原生类型不同,returnAddress类型在java语言之中并不存在相应的类型,也无法在程序运行期间更改returnAddress类型的值)。当线程执行某个java方法时 ,PC寄存器的内容总是下一条被执行指令的”地址”,这里的”地址”可以是一个本地指针,也可以是在方法字节码中相对于该方法起始指令的偏移量。如果该线程正在执行一个本地方法,那么PC寄存器的值是”Undefined”。

本地方法和java方法

java中有两种方法:java方法和本地方法。java方法是有java语言编写,编译成字节码,存储在class文件中的。

本地方法是有其它语言(比如C,C++,或者是汇编语言)编写的,编译成和处理器相关的机器代码。本地方法保存在动态连接库中,格式是各个平台专用的。

java方法是与平台无关的,但是在本地方法却不是。

运行中的java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法。

二 程序计数器作用
程序计数器的作用有以下两点:

字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,比如:顺序执行/选择/循环/异常处理.
在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪里.
针对第二个作用可以做如下理解:

由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。

如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Natvie方法,这个计数器值则为空(Undefined)。此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。(native方法是本地方法)

三 程序计数器特点
1 线程私有的,每个线程都有一个程序计数器. 
2 是java虚拟机规范里面, 唯一 一个 没有规定任何 OutOfMemoryError 情况的区域 
3 生活周期随着线程的创建而创建,随着线程的结束而消亡. 
4 程序计数器是一块较小的内存区域
è¿éåå¾çæè¿°


http://chatgpt.dhexx.cn/article/R7bOdXS5.shtml

相关文章

程序计数器的作用--简单易懂

3.程序计数器 什么是程序计数器,它是干什么用的? java中程序计数器是用寄存器实现的,它的作用是寻找下一个要执行的程序。 当我们的java程序被编译成二进制字节码文件后,如下图: 右面,是我们写的代码&…

程序计数器是什么(PC)?

在学习操作系统、JVM的时都可以看到程序计数器(PC)的身影,但是对于程序计数器的概念一直是模模糊糊,这篇就稍微讲一下什么是PC? 一、JVM层面 什么叫做“程序计数器”?它能做什么? 程序计数器…

什么叫做“程序计数器”?它能做什么?

什么叫做“程序计数器”?它能做什么? 程序计数器在JMM中的位置如下 是一个线程独享的数据区域,也就是说,每个线程之间的数据相互不干扰,是一个线程内存空间。 程序计数器 内存空间是不大的,第一眼看到这个…

简单谈谈对MVC设计模式的理解

MVC是Model-View-Controler的简称,即模型-视图-控制器。MVC是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。 MVC中的模型、视图、控制器分担着不同的任务: 视图:视图是用户看到并能与之交互的界面。视图向用户显示…

前端MVC设计模式

http://www.cnblogs.com/jinguangguo/p/3534422.html 前言 前端的MVC,近几年一直很火,大家也都纷纷讨论着,于是乎,抽空总结一下这个知识点。看了些文章,结合实践略作总结并发表一下自己的看法。   最初接触MVC是后端…

Java Web开发中MVC设计模式简介

一、有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容。但是我们之前自己编写的应用一般存在无条理性,对于一个小型的网站这样的编写没有任何问题,但是一但…

MVC设计模式及其工作原理

MVC模式介绍: MVC即模型Model、视图View、控制器Controller,用一种将业务逻辑、数据、视图分离的方式组织架构代码,通过分离关注点的方式来支持改进应用组织方式,其促成了业务数据Model从用户界面View中分离出来,还有…

android mvc设计模式

想在你的 Android 应用里优雅地分离出应用状态、用户交互和数据表现吗? 一个开发平台的设计者是的不会有闲工夫为你量身打造一个高层的应用架构的。但是你恰恰可以利用这一点,充分利用你的自由,根据应用需求和规模来实现你自己的架构。如果你…

mvc与mvvm设计模式

MVC与MVVM设计模式 一、MVC(Model- View-Controller) Model(模型):负责保存应用数据、和后端交互同步应用数据,Model主要与业务数据有关、与应用内交互状态无关View(视图):(html、css)负责构建和维护DOM元素&#xff…

MVC设计模式原理简述

开发MVC项目之前首先明确一点,MVC设计模式可以带来更好的软件结构和代码重用。 MVC如何工作 MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC 应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的…

[Java]JavaWeb开发中的MVC设计模式

一、有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容。但是我们之前自己编写的应用一般存在无条理性,对于一个小型的网站这样的编写没有任何问题,但是一但…

MVC设计模式及流程

MVC设计模式: 概述: 是一种开发结构合理、能使前后端分离、流程控制逻辑、业务逻辑调用与展示逻辑分离,实现高内聚,低耦合的设计模式。 M:数据实体模型(Model或Entity): 每一个类的成员变量字段对应数据库字段对应(对应的Entity…

SpringMVC(一)MVC设计模式

一、简介 MVC设计模式一般是指MVC框架,Model数据模型层,View视图层,Controller控制层。 使用MVC目的是将M和V实现代码分离,使统一程序有不同的表现形式。其中,View定义比较清晰,指用户界面。 web项目中&a…

MVC设计模式和UML类图

文章目录 一、UML 类图:二、MVC 设计模式 一、UML 类图: 14中UML图:https://blog.csdn.net/yoyo328/article/details/78009237 二、MVC 设计模式 MVC是常用的设计模式之一,将整个程序分为三个层次:视图模式层&…

JSP的MVC设计模式

文章目录 一. MVC模式概念1. M:Model(模型)2. V:View(视图)3. C:Controller(控制器):4. 图示理解 二. MVC案例1. WebContent内容2. servlet包内容3. entity包…

MVC设计模式学习(一)

笔者对于MVC也是初学,写这篇文章的主要目的是方便自己去理解MVC的相关内容,所以有些描述并不是那么专业和全面,请多多包涵。 一、MVC设计模式概述 MVC全名是Model View Controller,是模型(model)-视图(view)&#xff…

MVC设计模式含义和优点

MVC模式(Model-View-Controller)是 软件工程 中的一种 软件架构 模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。 MVC模…

什么是MVC设计模式

直接上图,其中model 和view大家经常写,就不说了 有人可能并不清楚controller 到底是啥,其实就是经常写的 data source ,delegate,outlet什么的 先撇开那些乱七八糟的箭头单看他们之间的分界线,view与controller、model与controll…

MVC设计模式详解

MVC(Model View Controller)模型(model)-视图(view)-控制器(controller): MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器。使用MVC是将M和V的实现代码分离,从而使同…

MVC 设计模式概述

(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/53292312) 1、MVC设计模式: 如图所示,MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型 (Model)、视图(View)和控制器(Contr…