千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)
程序計數(shù)器主要有下面兩個作用:
1、字節(jié)碼解釋器通過改變程序計數(shù)器來依次讀取指令,從而實(shí)現(xiàn)代碼的流程控制,如:順序執(zhí)行、選擇、循環(huán)、異常處理。
2、在多線程的情況下,程序計數(shù)器用于記錄當(dāng)前線程執(zhí)行的位置,從而當(dāng)線程被切換回來的時候能夠知道該線程上次運(yùn)行到哪兒了。(需要注意的是,如果執(zhí)行的是 native 方法,那么程序計數(shù)器記錄的是 undefined 地址,只有執(zhí)行的是 Java 代碼時程序計數(shù)器記錄的才是下一條指令的地址。) 所以,程序計數(shù)器私有主要是為了線程切換后能恢復(fù)到正確的執(zhí)行位置。
- 虛擬機(jī)棧和本地方法棧為什么是私有的?
- 虛擬機(jī)棧: 每個 Java 方法在執(zhí)行的同時會創(chuàng)建一個棧幀用于存儲局部變量表、操作數(shù)棧、常量池引用等信息。從方法調(diào)用直至執(zhí)行完成的過程,就對應(yīng)著一個棧幀在 Java 虛擬機(jī)棧中入棧和出棧的過程。
- 本地方法棧: 和虛擬機(jī)棧所發(fā)揮的作用非常相似,區(qū)別是: 虛擬機(jī)棧為虛擬機(jī)執(zhí)行 Java 方法 (也就是字節(jié)碼)服務(wù),而本地方法棧則為虛擬機(jī)使用到的 Native 方法服務(wù)。
在 HotSpot 虛擬機(jī)中和 Java 虛擬機(jī)棧合二為一。 所以,為了保證線程中的局部變量不被別的線程訪問到,虛擬機(jī)棧和本地方法棧是線程私有的。
下一篇
什么是上下文切換相關(guān)推薦