PC寄存器存Java字节码的指令地址。

1. 返回地址的作用

方法A调用方法B的时候,PC寄存器会跟着移动到B方法去。当B执行完后,要能返回A继续执行,就需要A当时执行到的那条指令的地址。所以,在B的栈帧中保存A当时的指令地址(当时PC寄存器的值),当B执行完后,根据此返回地址跳回A。

没有PC寄存器,执行器也会按照指令的顺序一条条正常执行。PC寄存器的作用在于多线程切换的时候,能找到每个线程执行的位置,所以它是线程私有的。

2. 当执行Native方法时,PC寄存器存的是Undefined,若发生线程切换,如何切回来呢?

Java线程总是以某种形式映射到OS线程上。HotSpot VM的映射模型是1:1。当执行native方法时,原生的CPU上的对应的线程接管。若此时线程切换是原生CPU的PC寄存器管理,能确保native方法执行完。

当native方法执行完后,会出栈(栈帧pop),返回到被调用的地方继续执行程序。就像问题1一样,不需要PC寄存器也能继续往下顺序执行。

原文:https://www.cnblogs.com/tommaoxiaoqi/p/13051041.html

java中pc寄存器的作用是什么_既然有PC寄存器,栈帧里的返回地址的作用是什么?...相关推荐

  1. java 中pc寄存器的作用_既然有PC寄存器,栈帧里的返回地址的作用是什么?

    PC寄存器存Java字节码的指令地址. 1. 返回地址的作用 方法A调用方法B的时候,PC寄存器会跟着移动到B方法去.当B执行完后,要能返回A继续执行,就需要A当时执行到的那条指令的地址.所以,在B的 ...

  2. java中什么方法用来清空流_这个真的写的很细,JavaIO中的常用处理流,看完只有10%的人还不懂了...

    JavaIO中的常用处理流 在前面,我们了解了有关JavaIO流基础的使用,其中对于IO流来说最基础的四大基类就是InputStream.OutputStream.Reader.Writer.而我们对 ...

  3. java中常见的编译错误的是_编译时JAVA最常见的错误有哪些

    如果你正学习Java语言,你在编译和执行代码的时候遇到问题,一般来说问题将分为2类:无论你遇到的是编译时错误,这说明你的程序编译失败,还是你遇到运行时错误,这是指错误发生在你成功地编译了程序但不能运行 ...

  4. java中多线程重要吗_Java基础知识_多线程必要知识点

    一.使用多线程遇到的问题 1.1  线程安全问题 在前面的文章中,多线程主要是为了提高我们应用程序的使用率.但同时,这会给我们带来很多安全问题. 如果我们在单线程中以顺序(串行->独占)的方式执 ...

  5. 在JAVA中 以下程序_在Java中,以下程序的输出结果是()_学小易找答案

    [单选题]运行以下Java代码,说法正确的是( ). [单选题]在Java中,以下程序的输出结果是() [单选题]利用"出声"的方式向学生展示教师分析问题的过程与方法的教学方法是_ ...

  6. Java中创建线程需要使用的类_如何通过使用Java中的匿名类创建线程?

    甲线程是可以同时与该程序的其他部分被执行的功能.所有Java程序都有至少一个称为主线程的线程,该线程由Java虚拟机(JVM)在程序启动时由主线程调用main()方法创建. 在Java中,我们可以通过 ...

  7. java中形参不可以是对象吗_(重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...

    1.0建立二叉树的代码,在java中必须创建二叉树的方法必须用返回值,因为不存在c语言中的引用传递,在java中只有值传递 代码1为正确,代码2(没有使用返回值)为错误.那么为什么之前的例子中将对象作 ...

  8. java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?...

    本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: C++ Virtual/Pure Virtual Explained 虚函数和纯虚函数有什么区别? CPP中的纯虚函数与 ...

  9. 在java中私有方法能被重载吗_我可以在Java中重载私有方法吗?

    重载是实现多态的一种机制,其中,一个类包含两个具有相同名称和不同参数的方法. 每当您调用此方法时,方法主体都将基于参数与方法调用绑定. 重载私有方法 是的,我们可以在Java中重载私有方法,但是您可以 ...

最新文章

  1. TestLink学习七:TestLink测试用例Excel转换XML工具
  2. 基于深度学习的脑电图识别 综述篇(二)数据采样及处理
  3. 一系列图论问题[转]
  4. 计算机管理是什么控件,Win7旗舰版系统WMI控件的功能作用是什么?
  5. linux 显卡驱动程序,NVIDIA为Linux发布重大驱动程序升级
  6. windows 下rsync
  7. 境外WiFi市场持续升温2016年或迎普及元年
  8. 《Python语言程序设计基础》:第2章:Python程序实例解析:程序练习题
  9. 【云计算学习教程】云计算的优势和劣势(优点和缺点)分析
  10. python绘制折线图显示单位_如何使用python语言pygal模块创建折线图并显示
  11. C语言求解一元二次方程
  12. 蓝牙鼠标windows linux,解决Ubuntu 18.04与Windows 10双系统蓝牙鼠标连接的问题
  13. java安装 2203_win7系统无法安装java程序提示“内部错误2203”的解决方法
  14. 如何生成多个互不重叠的不同半径圆(逻辑)
  15. [C/C++]跳格子游戏 - 2019校招编程刷题
  16. 售前售前售前售前售前
  17. java 阿里云服务器流下载慢的可能原因
  18. “目前没有可用的登录服务器处理登录请求”解决方案
  19. “你的期望薪资是多少?” 月薪三万的他是这样回答的......
  20. 打造 PE 和 Linux 二合一U盘启动盘

热门文章

  1. python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...
  2. 推送通知_手机总是收到烦人的推送,教你几招,彻底摆脱无用通知
  3. android怎么判断程序进入了后台,Android检测应用程序是否进入后台
  4. linux 不接显示器不启动_不知道这十项Linux常识,就别说自己玩过Linux
  5. 简述mysql的概念及作用_数据库 简答题
  6. 过年回家抢票不求人,试试这个开源抢票神器吧!
  7. 皮一皮:今年的网友不够优秀啊。。。
  8. 微信“红包封面”终于开放:这样免费定制!
  9. 【偶尔一道ctf】xctf adword mobile easy-apk
  10. 台式计算机不能有线上网,台式电脑怎么样不能有线就可以连接网络,赶紧看看...