程序计数器(Program Counter Register)也称PC寄存器。是运行时数据区里唯一一块没有Out of Memory的区域。

只存下一个字节码指令的地址,消耗内存小且固定,无论方法多深,他只存一条。

只针对一个线程,随着线程的结束而销毁。

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

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

因为CPU需要不停的切换各个线程,这时候切换回来以后,就的知道接着从哪开始执行。

JVM的字节码解释器就是通过改变pc寄存器的值来确定下一条应该执行什么样的字节码指令。

PC寄存器为什么会被设定为线程私有

我们都知道所谓多线程在一个特定的时间段内只会执行其中某一个线程的方法,CPU会不停的做任务切换,这样必然导致经常终端或回复,如果保证分毫不差呢?为了能够准确地记录各个线程正在执行的当前字节码指令地址,最好的办法自然是为每一个线程分配一个pc寄存器,这样一来各个线程之间便可以进行独立计算,从而不会出现相互干扰的情况。

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

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

程序计数器没有OOM相关推荐

  1. 百度二面:一个线程OOM了,其它线程还能运行吗?

    由于面试官仅提到OOM,但 Java 的OOM又分很多类型: 堆溢出("java.lang.OutOfMemoryError: Java heap space") 永久代溢出(&q ...

  2. 面试官:一个线程OOM,进程里其他线程还能运行么?

    作者:孤独烟,资深后端工程师,业内知名原创作者! 引言 这题是一个网友@大脸猫爱吃鱼给我的提问,出自今年校招美团三面的一个真题.大致如下 一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运 ...

  3. JVM内存管理:深入Java内存区域与OOM

    Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝 ...

  4. 什么是OOM,为什么会OOM及一些解决方法

    1)什么是OOM?  OOM,全称"Out Of Memory",翻译成中文就是"内存用完了",来源于java.lang.OutOfMemoryError.看下 ...

  5. Java常见内存溢出(OOM)解决方案

    Java 常见内存溢出(OOM)解决方案 一,jvm内存区域   1,         程序计数器 一块很小的内存空间,作用是当前线程所执行的字节码的行号指示器. 2,         java栈 与 ...

  6. 什么是java OOM?如何分析及解决oom问题?

    最近查找了很多关于OOM,甚至于Java内存管理以及JVM的相关资料,发现这方面的东西太多了,竟有一种眼花缭乱的感觉,要想了解全面的话,恐非一篇文章能说清的,因此按照自己的理解整理了一篇,剩下的还需要 ...

  7. JVM_03 运行时数据区 [ 程序计数器+本地方法栈 ]

    一. 程序计数器 ①. 作用,是用来存储指向下一条指令的地址,也即将要执行的指令代码.由执行引擎读取下一条指令 ②. 特点:①. 是线程私有的 ②. 不会存在内存溢出 ③. 注意:在物理上实现程序计数 ...

  8. java进程内存一直没释放_面试官:一个线程OOM,进程里其他线程还能运行么?...

    引言 这题是一个网友@大脸猫爱吃鱼给我的提问,出自今年校招美团三面的一个真题.大致如下 一个进程有3个线程,如果一个线程抛出oom,其他两个线程还能运行么? 先说一下答案,答案是还能运行 不瞒大家说, ...

  9. 46栈内存溢出、内存区域(程序计数器、Java 虚拟机栈、本地方法栈、Java 堆、方法区、直接内存、内存溢出)与内存溢出(对象实例化分析)

    46.什么情况下会发生栈内存溢出 46.1.Java 内存区域与内存溢出 46.1.1.内存区域 46.1.1.1.程序计数器 46.1.1.2.Java 虚拟机栈 46.1.1.3.本地方法栈 46 ...

最新文章

  1. SSH 远程连接原理及故障排错详解
  2. 用 nginx 代理 MailChimp API 并支持跨域
  3. 转载-如何应对在线故障
  4. php 系统平均负载,Linux_解析Linux系统的平均负载概念,一、什么是系统平均负载(Load a - phpStudy...
  5. Basic INFO - 在命令行Build InstallShield安装包工程获得压缩安装包
  6. 安装linux系统收费标准,LINUX操作系统安装标准规范.doc
  7. 2013-2-19 Android之ActionBar学习(转)
  8. ugui获取坐标_UGUI源码解析(六)Raycast
  9. 【系统架构】VC 开发辅助工具大收集
  10. 阻止 Mac 进入睡眠模式保持清醒的 5 种方法
  11. Python内置函数(56)——set
  12. 远程计算机统考试题,2015年电大远程网络教育计算机应用基础统考模拟试题集...
  13. WordPress优化攻略:全面提升WP网站速度仅需3个加速方法和1个插件
  14. ISO/IEC27000系列标准研究
  15. 如何下载河南省卫星地图高清版大图
  16. 《Real-Time Rendering 4th Edition》全文翻译 - 第6章 纹理化(上)6.1 ~ 6.3
  17. 开启Atcoder之路
  18. install CentOS 7.2 时未出现按下tab提示,安装时未找到引导程序vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\
  19. 耀华YHL-5屏幕开发教程
  20. 定量/高光谱遥感之——传感器定标

热门文章

  1. 部分WP-GKCTF2020
  2. 分别输出0-100的合数和质数
  3. 让div在body中水平和垂直居中
  4. 《倾世妖颜》曝光群像海报 9月27日群豪逐鹿中原
  5. DM8 DSC 结合multipath共享集群搭建
  6. oracle 打包及本体,Oracle ADR packaging incidents(打包事件)
  7. 集成电路中的测试概述(一)
  8. 深度学习——卷积层+填充和步幅(笔记)
  9. DEM设置投影坐标系
  10. AMD R9 4900H vm16下mac10.15详细教程