既然有PC寄存器,棧幀里的返回地址的作用是什么?


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寄存器也能繼續往下順序執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM