前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解JVM--(1)运行时的数据区域划分-程序计数器

深入理解JVM--(1)运行时的数据区域划分-程序计数器

作者头像
haoming1100
发布2018-04-27 17:36:51
9260
发布2018-04-27 17:36:51
举报
文章被收录于专栏:步履前行步履前行

  最近在学习jvm,准备在园子里写个系列笔记,有什么问题大家可以一起探讨。今天学习数据区域划分的第一部分--程序计数器。   JVM在运行时会把管理的内存划分为不同的数据区域,有的区域随着jvm进程启动就开始存在,有的生命周期则与用户线程的周期相同。下面我们来看个划分图(摘自网络)

其中,方法区、java堆、执行引擎、本地库接口是线程共享的,虚拟机栈、本地方法栈、程序计数器是私有的。

  接下来,我们介绍第一个概念:程序计数器。

      首先看一下百度百科的解释:

程序计数器是用于存放下一条指令所在单元的地址的地方。

   程序计数器是计算机处理器中的寄存器,它包含当前正在执行的指令的地址(位置)。当每个指令被获取,程序计数器的存储地址加一。在每个指令被获取之后,程序计数器指向顺序中的下一个指令。当计算机重启或复位时,程序计数器通常恢复到 零。

  当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指令的地址。此后经过分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令。

  程序计数器其实就是一小块内存区域,可以看作是当前线程所执行的字节码的行号代码,直白一点说,就是当前线程执行到哪一行的一个代码计数器。

  大家都知道在jvm中,是跑多线程的,包括我们的debug,都是在多线程中运行。java中的多线程是通过轮流切换分配处理器来执行的,在任何时间,一个处理器只处理一条指令,所以一旦切换线程,就依靠程序计数器来确定执行到了哪一行代码,或者说是哪一行指令,所以,程序计数器是私有的,才能保证各个线程间的任务执行互不影响。

  还有一点要注意的是,如果线程运行的是一个java的方法,程序计数器记录的是虚拟机字节码指令的地址(在jvm启动后,编译java文件成字节码文件),而如果是一个Native方法,程序计数器则为空,这里也是java虚拟机规范中,唯一一个没有规定OutOfMemoryError的区域。

The Java Virtual Machine can support many threads of execution at once (JLS §17). Each Java Virtual Machine thread has its own pc (program counter) register. At any point, each Java Virtual Machine thread is executing the code of a single method, namely the current method (§2.6) for that thread. If that method is not native, the pc register contains the address of the Java Virtual Machine instruction currently being executed. If the method currently being executed by the thread is native, the value of the Java Virtual Machine's pc register is undefined. The Java Virtual Machine's pc register is wide enough to hold a returnAddress or a native pointer on the specific platform.

  因为jvm中的程序计数器,记录的是字节码指令的地址,而本地方法体不一定是有java实现的,所以自然不能支持程序计数器。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-10-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档