精华内容
下载资源
问答
  • 之前一直不明白程序计数器的作用? 最近通过不断的研究jvm内存模型,感觉终于明白了一些 JVM并发是通过切换并分配CPU时间片来实现的,在任何时刻,一个处理器内核只能执行一个线程中的指令 因为为了线程切换后能...

    之前一直不明白程序计数器的作用?

    最近通过不断的研究jvm内存模型,感觉终于明白了一些

    JVM并发是通过切换并分配CPU时间片来实现的,在任何时刻,一个处理器内核只能执行一个线程中的指令

    因为为了线程切换后能恢复到正确的执行位置,jvm需要先保存被挂起的线程的上下文环境

    将线程的执行位置保存到程序计数器中,将调用方法的信息保存在栈中,同时将待执行的线程的程序计数器和栈中的信息写入到处理器中

    完成线程的上下文切换

     

    因此程序计数器就是用来保存线程执行的位置 见名之意  就是来记录程序运行到哪一步的

    展开全文
  • JVM-程序计数器及其作用

    千次阅读 2020-05-10 22:32:34
    JVM就是通过读取程序计数器的值来决定下一条需要执行的字节码指令,进而进行选择语句、循环、异常处理等; 举例 比如老王正在看片,他看到三十五分钟的时候,突然他的QQ好友苍老师给他开视频,这时候肯定打断他看片...

    概念

    多线程的Java应用程序:为了让每个线程正常工作就提出了程序计数器(Programe Counter Register),每个线程都有自己的程序计数器这样当线程执行切换的时候就可以在上次执行的基础上继续执行,仅仅从一条线程线性执行的角度而言,代码是一条一条的往下执行的,这个时候就是程序计数器;JVM就是通过读取程序计数器的值来决定下一条需要执行的字节码指令,进而进行选择语句、循环、异常处理等;

    举例

    比如老王正在看片,他看到三十五分钟的时候,突然他的QQ好友苍老师给他开视频,这时候肯定打断他看片了,假设苍老师和他视频完了,他肯定要接着他那35分钟的进度去继续看,这时候他怎么知道我看到35分钟了?这时候程序计数器就起了作用,他负责管理进度。

    特点

    • 线程私有
    • JVM规范中唯一没有规定OutOfMemoryError情况的区域
    • 如果正在执行的是Native 方法,则这个计数器值为空

    首先,为什么是线程私有?
    Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现,也就是说,在同一时刻一个处理器内核只会执行一条线程,处理器切换线程时并不会记录上一个线程执行到哪个位置,所以为了线程切换后依然能恢复到原位,每条线程都需要有各自独立的程序计数器。

    为什么没有规定OutOfMemoryError?
    如上文,程序计数器存储的是字节码文件的行号,而这个范围是可知晓的,在一开始分配内存时就可以分配一个绝对不会溢出的内存。

    为什么执行Native方法,值为空?
    Native方法大多是通过C实现并未编译成需要执行的字节码指令,也就不需要去存储字节码文件的行号了。

    摘要连接

    展开全文
  • 程序计数器

    2021-01-24 08:39:10
    程序计数器的作用 寄存器(程序计数器)的作用是记住下一条jvm指令的地址,图中可以看到,当我们只想0指令时,会把3的执行地址放入到我们寄存器,然后解释器从寄存器拿到3的地址执行,同时寄存器存入4,以此类推 ...

    程序计数器

    程序计数器的位置

    在这里插入图片描述

    程序计数器的作用

    • 寄存器(程序计数器)的作用是记住下一条jvm指令的地址,图中可以看到,当我们只想0指令时,会把3的执行地址放入到我们寄存器,然后解释器从寄存器拿到3的地址执行,同时寄存器存入4,以此类推
      在这里插入图片描述

    程序计数器的定义

    • 每个寄存器都是私有的,不会存在内存溢出,如图在多线程的状态下,线程一的时间片用完时,寄存器会存下一条指令的地址,同时线程2执行,回来时只需读取寄存器变可知执行到哪里,所以每一个线程都会有他的一个私有的寄存器
      在这里插入图片描述
    展开全文
  • JVM-程序计数器

    2019-11-05 19:57:53
    程序计数器的作用是记录执行的字节码的位置,说白了就是代码执行到哪里了。 有什么用呢?这就得说代码在执行时,处理器一次在某一个时刻只能执行一个线程中的一行代码,所以其他线程代码的执行就会暂时停止,等到...

    程序计数器的作用是记录执行的字节码的位置,说白了就是代码执行到哪里了。

    有什么用呢?这就得说代码在执行时,处理器一次在某一个时刻只能执行一个线程中的一行代码,所以其他线程代码的执行就会暂时停止,等到处理器可以执行其他线程的代码时就会用到程序计数器记录的位置信息,让代码继续执行下去。

    所以,每个线程都私有一个程序计数器,各个线程的程序计数器相互独立互不影响。

    如果线程正在执行的是一个Java方法,那么程序计数器记录的是字节码的地址,如果执行的是Native方法,那么程序计数器的值为空(Undefined)。

    此区域是唯一一个不会有OutOfMemoryError的区域

    展开全文
  • 程序计数器+栈

    2020-07-18 15:57:45
    程序计数器的作用:记住下一条jvm指令的执行地址; 程序计数器的特点:是线程私有的;不会存在内存溢出; 栈 一个栈是由多个栈帧组成的,栈的特点是先进后出; 定义:Java Virtual Machine Stacks(Java...
  • 我们都知道虚拟机内存划分了多个区域,并不是一张大饼。那么为什么要划分为多块区域呢,直接搞一块区域,所有用到内存地方都往这块区域里扔不就行了,岂不痛快。是,如果不进行区域划分,扔时候确实痛快,...
  • 程序计数器的作用2. 程序计数器的特点 程序计数器(寄存器) 1. 程序计数器的作用 记住下一条JVM指令的执行地址 当解释器将指令getstatic解释为机器码时,程序计数器会记住指令astore_1的地址3,当解释器将...
  • 程序计数器的作用:记住下一条jvm指令的执行地址 程序的执行流程
  • 1.2.程序计数器的作用 程序计数器可以看作是当前线程所执行字节码的行号指示器,也就是说,程序计数器这块小空间里面记录的是当前线程正在执行的字节码的行号。字节码解释器通过改变计数器的值来获取下一条要执行的...
  • 首先我们来看程序计数器(PC Register),再了解程序计数器的作用之前,我们先分析下面的代码。 很明显图中右侧是Java源代码,Java源代码是不能直接执行运行的,需要经过编译,即编译成左侧的二进制字节码,主要...
  • JVM程序计数器

    2018-07-28 02:52:00
    今天突然在思考一个问题,jvm内存... 程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里字节码解释器工作时就是通过改变这个计数器的值来选取下一条需...
  • 程序计数器的作用】 执行引擎的解释器在工作时就是通过改变程序计数器来选取下一条需要执行的字节码指令 程序控制流的指示器,分支、循环、跳转异常处理、线程恢复等基础功能都需要依赖程序计数器完成。 大白话来...
  • 程序计数器的作用 PC寄存器是用来存储指向下一条指令的地址,也就是即将要执行的指令代码。由执行引擎读取下一条指令。 特点 它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域 在jvm规范...
  • jvm程序计数器

    2018-10-26 09:45:01
    程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转...
  • 1.程序计数器概述 1.程序计数器又称为PC寄存器。...2.程序计数器的作用 PC寄存器用来存储下一条要执行的指令的地址。执行引擎根据PC寄存器里面的地址,执行指令,执行完成之后,再根据PC寄存器里面存储的地址,执行下
  • Java 程序计数器

    2019-12-21 12:22:04
    程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。 在概念模型中,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、...
  • 002-程序计数器

    2021-01-28 13:56:25
    程序计数器,一个线程一个栈,每个栈分配一个程序计数器程序计数器 分给此栈线程会调度上图字节码,下图是调度整体流程: 线程在程序计数器存进地址0,——>线程调用解释器,解释器去程序计数器获取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,415
精华内容 966
关键字:

程序计数器的作用