2 程序计数器
2 程序计数器
2.1 定义
定义:program counter register 程序计数器(寄存器)
那我们通过一个例子来给大家解释程序计数器
首先明确这样一个概念,我们的二进制指令是不能直接给cpu执行的,还需要一个翻译官-解释器,把我们的二进制字节码解释为机器码,然后交给cpu去执行。
那说了上面这些跟我们要将的程序计数器有什么关系呢?
-
程序计数器就是记住下一条jvm指令的执行地址,根据这个地址信息,我们就能找到这条指令来执行他。
假如我们正在执行第一条地址为0的getstatic ,然后我们会把下一条指令astore_1的地址3交给程序计数器,等你第一条指令执行完之后,解释器再去程序计数器里面取到下一条要执行的指令的地址3。根据地址3找到下一条指令astore_1。然后重复上面的过程。
在物理上,实现程序计数器是通过寄存器来实现的。程序计数器是java对物理硬件的一些屏蔽和抽象。那寄存器呢可以说是整个cpu组件里读取速度最快的一个单元,因为我们读取动作很频繁,所以java虚拟机在设计的时候就把寄存器当做程序计数器,用它来存取地址。
-
是线程私有的:我们知道呢,java程序是支持多线程并行运行的
假如我们有两个线程在执行,那我们知道cpu是分成时间片的执行的。那cpu在不断的做切换,我怎么知道我切换回来之后该执行哪一条指令。两个线程一个执行一会,比如我线程1正在执行地址为9的指令,然后到点了,线程1程序计数器会记住地址为10的指令地址。cpu跑去执行线程2的地址为5的代码,也到点了,然后线程2的程序计数器记住地址为6的指令地址。
-
是唯一一个在java内存区中不会存在内存溢出的区
像堆啊,方法,栈啊,都会存在内存溢出。
posted on 2021-09-24 21:37 Love&Share 阅读(348) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~