画图学 JVM(六) 04 程序计数器

目录

  • 一、 内容结构图
  • 二、程序计数器介绍
    • 2.1 程序计数器所处的位置
    • 2.2 程序计数器的作用
    • 2.3 特点
    • 2.4 存放的内容
  • 二、举例说明
    • 2.1 代码与字节码
    • 2.2 从执行的角度看程序计数器
  • 三、两个常见问题
    • 3.1 问题一
    • 3.2 问题二
    • 3.3 并发行与并发简介
  • 系列学习
  • 附件

一、 内容结构图

本章主要介绍 PC 寄存器的相关知识, 包括为什么叫这个名字? 程序计数器有什么作用?有哪些特征, 并通过一个实例详细介绍,最后介绍两个面试常见的问题。
画图学 JVM(六) 04 程序计数器_第1张图片

二、程序计数器介绍

2.1 程序计数器所处的位置

画图学 JVM(六) 04 程序计数器_第2张图片
程序计数器又叫 PC 寄存器(Program Counter Register)。PC 寄存器并非物理寄存器,翻译为程序计数器更贴切(也称为程序钩子),并且也不容易引起不必要的误会。JVM 中的 PC 寄存器是对物理寄存器的一种抽象模拟。

  • 官方说明
    各版本地址
    https://docs.oracle.com/javase/specs/index.html
    JDK 8 地址
    https://docs.oracle.com/javase/specs/jvms/se8/html/

2.2 程序计数器的作用

画图学 JVM(六) 04 程序计数器_第3张图片用来存储指向下一条指令的地址,由引擎读取下一条指令。它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要这个计数器来完成。字节码解释器工作时,通过改变计数器的值来选取指令执行。

2.3 特点

  • 唯一一个在 Java 虚拟机规范中没有规定 OOM 的区域
  • 它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域
  • 在 JVM 规范中,每个线程都有他自己的程序计数器,是线程私有的,生命周期与线程生命周期保持一致

2.4 存放的内容

  • 执行 Java 方法时:当前方法的 JVM 下一条指令地址
  • 执行 Native 方法时:未指定值(undefined)

二、举例说明

2.1 代码与字节码

画图学 JVM(六) 04 程序计数器_第4张图片使用 javap 命令查看字节码文件(.class)

2.2 从执行的角度看程序计数器

画图学 JVM(六) 04 程序计数器_第5张图片

  1. 执行引擎从当前线程的程序计数器获取指令地址(偏移地址)。
  2. 根据指令地址获取字节码指令访问和操作数栈、本地变量表等。
  3. 字节码指令会解释或编译成机器指令后,交给 CPU执行。

三、两个常见问题

3.1 问题一

使用 PC寄存器指令地址有什么用呢?
为什么使用 PC 寄存器记录当前线程的执行地址呢?
PC 寄存器存储指向下一条指令的地址,由引擎读取下一条指令。它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要这个计数器来完成。字节码解释器工作时,通过改变计数器的值来选取指令执行。

3.2 问题二

PC 寄存器为什么要设定为线程私有?
多线程的并发是指在一个时间段内多个线程轮流执行,但某一个时间点上,只有一个线程在执行,CPU 在任务切换时,需要不停将线程中断或恢复。为了能够准确记录各个线程正在执行的字节码指令地址,最好的办法就是为每个线程都分配一个 PC 寄存器。每个线程创建后,都生成各自的程序计数器和栈帧,这样在中断和恢复运行时线程就互不影响了。

3.3 并发行与并发简介

画图学 JVM(六) 04 程序计数器_第6张图片

  • 时间片:是分时操作系统分配给每个正在运行的进程微观上的一段 CPU 时间,时间片通常很短(在Linux 上为5ms-800ms),用户不会感觉到。
  • 串行:线程按先后顺序执行, 并且在一个线程执行完成后才切换另一个线程执行。
  • 并行:同一时间点多个线程同时运行。多核或集群。
  • 并发:就是指多个线程在一个时间段内通过时间片轮番执行, 一个时间点上只有一个线程在运行。线程轮番穿插地运行 ,“看起来像”同时运行的。

系列学习

画图学JVM(一)相关资料和学习计划 《硅谷2020最新版宋红康JVM》
画图学JVM(二)章节目录
画图学JVM(三)01 JVM 与 Java 体系结构
画图学JVM(四)02 类加载子系统
画图学JVM(五) 03 运行时数据区概述和线程
画图学JVM(六) 04 程序计数器

附件

《尚硅谷2020最新版宋红康JVM》01 JVM 与 Java 体系结构 学习记录 PPT
《尚硅谷2020最新版宋红康JVM》02 类加载子系统 学习记录 PPT
《尚硅谷2020最新版宋红康JVM》03 运行时数据区概述和线程 PPT
《尚硅谷2020最新版宋红康JVM》04 程序计数器 PPT
《尚硅谷2020最新版宋红康JVM》推荐的资料和工具集.

你可能感兴趣的:(JVM,jvm,java,编程语言,多线程)