美文网首页
JVM-程序计数器

JVM-程序计数器

作者: xuchengsheng | 来源:发表于2018-11-08 15:54 被阅读0次

描述

  • 现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运行的各个任务
  • 在java多线程中是通过线程切换的来实现的,在切换到下一个线程过程中需要记录当前线程的正在执行的虚拟机字节码指令地址(执行Native方法时计数器为Undefined),CPU切换回来时会按照计数器记录的行数继续执行
  • 每一个线程都有一个程序计算器并且是线程独享
  • Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域

验证

  • 验证代码
package com.superxu.jvm;

public class ProgramCounterRegister {
    
    public static void main(String[] args) {
        int i = 1;
        int j = 2;
        int k = 3; 
    }
}
  • 通过javap -c 查看java编译器生成的字节码
    • iconst_1 将int类型常量1压入栈
    • istore_1 将int类型值存入局部变量1
    • iconst_2 将int类型常量2压入栈
    • istore_2 将int类型值存入局部变量2
    • iconst_3 将int类型常量3压入栈
    • istore_3 将int类型值存入局部变量3
1541657857113.png
  • 线程切换图
    • 当线程A获得cpu调度,当执行完字节码指令3后,线程A失去CPU调度,此时保存线程A字节码指令为4,A线程处于等待状态
    • 当线程B执行到指令5时,失去cpu调度,线程A重新得到cpu调度,查看线程A种中计数器指令,继续执行线程A


      1541662713279.png

相关文章

  • JVM-程序计数器

    描述 现在的操作系统都是多任务的,为了能让更多的任务能同时在系统上更好的运行,需要一个管理程序来管理计算机上同时运...

  • Java虚拟机的运行时数据区域

    Java虚拟机的运行时数据区域有程序计数器、虚拟机栈、本地方法栈、堆和方法区。 程序计数器 程序计数器,程序计数器...

  • 终于有人将jvm讲清楚了,阿里架构师推荐jvm架构解析文档

    一、JVM 内存区域划分 程序计数器(线程私有) 程序计数器(Program Counter Register),...

  • JVM系列之内存结构

    JVM区域划分 程序计数器、Java 堆、Java 虚拟机栈、元数据区和本地方法栈 程序计数器 程序计数器是当前线...

  • 十二,JVM简介

    程序计数器: 程序计数器线程私有,每一个线程都有一个程序计数器,用于记录程序运行位置,且不存在内存溢出问题。 Ja...

  • JVM内存区域划分

    JVM内存的划分有五片: 程序计数器   程序计数器(Program Counter Register),也有称作...

  • Java虚拟机(2):运行时内存结构

    线程私有数据区:虚拟机栈、本地方法栈、程序计数器; 线程共享数据区:方法区,堆。 1. 程序计数器 程序计数器(P...

  • Java程序计数器刨根问底

    JAVA虚拟机管理的内存区域图 1、什么是程序计数器? 程序计数器是当前线程正在执行的字节码的地址,程序计数器是线...

  • 图解jvm--(一)jvm内存结构

    jvm内存结构 1.程序计数器 1.1 定义 Program Counter Register 程序计数器(寄存器...

  • 深入理解JVM内存模型

    JVM 内存模型 运行时数据区域 程序计数器(Program Conunter Regisiter) 程序计数器是...

网友评论

      本文标题:JVM-程序计数器

      本文链接:https://www.haomeiwen.com/subject/fxnixqtx.html