JVM程式計數器,虛擬機器棧,本地方法棧
程式計數器
它記錄了程式執行位元組碼的行號和指令,位元組碼直譯器的工作就是改變程式計數器的值,切換下一條需要執行的指令(分支,迴圈,跳轉,異常等)。java虛擬機器是多執行緒透過輪流切換CPU時間片的方式實現,在同一時間內,CPU只會執行一個執行緒中的一個指令,為了每次切換回來都能到正確的執行位置,每個執行緒都會有一個獨立的執行緒計數器,每個計數器不會相互影響,並且是執行緒私有的。由於不是開發者操作,所以是不會產生異常的。
虛擬機器棧
虛擬機器棧也是執行緒私有的,它的宣告週期與執行緒一樣(和執行緒同生死)。如果執行緒請求棧的深度大於虛擬機器所允許的深度則會報錯StackOverFlow
的錯誤。如果虛擬機器可以動態擴充套件,如果擴充套件後無法獲得到記憶體,就會報錯OutOfMemoryError
。java虛擬機器棧描述的是Java方法執行的記憶體模型,每個方法執行的同時都會建立一個棧幀,對於我們來說主要關注棧記憶體,也是方法內的區域性變數。
棧幀
棧幀虛擬機器進行方法呼叫和方法執行的資料結構,它是虛擬機器執行時資料區虛擬機器棧的棧元素。棧幀儲存了方法的區域性變數表,運算元棧,動態連結和方法返回地址資訊。在程式編譯期,棧幀需要多大的區域性變數表記憶體,多深的運算元棧已經確定。在活動執行緒中,棧頂的棧幀才是有效的,與這個棧幀關聯的方式是當前方法,執行引擎執行的所有位元組碼指令都只會作用於當前棧幀。
本地方法棧
本地方法棧和虛擬機器棧發揮的作用基本一樣。區別是:本地方法棧執行的是Native方法服務,而虛擬機器棧執行的是java方法。在HotSpot vm中本地方法棧和虛擬機器棧合二為一。
注意:
當一個執行緒呼叫本地方法時,就會進入了一個不受java虛擬機器限制的世界,它和虛擬機器有著同樣的許可權。本地方法可以透過本地介面訪問虛擬機器執行時資料區。它可以直接使用本地處理器的暫存器。並不是所有的JVM都支援本地方法。如果JVM產品不打算支援Native方法,也可以不用實現本地方法棧。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983768/viewspace-2728752/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jvm-執行時資料區(程式計數器、Java虛擬機器棧、本地方法棧)JVMJava虛擬機
- Java JVM——5.Java虛擬機器棧JavaJVM虛擬機
- JVM(程式計數器,棧,堆)JVM
- JVM學習筆記五--虛擬機器棧JVM筆記虛擬機
- java虛擬機器 jvm 出入java棧 棧空間記憶體分配Java虛擬機JVM記憶體
- jvm記憶體區域之虛擬機器棧JVM記憶體虛擬機
- 【JVM之記憶體與垃圾回收篇】虛擬機器棧JVM記憶體虛擬機
- jvm入門及理解(三)——執行時資料區(程式計數器+本地方法棧)JVM
- 第一章 虛擬機器棧虛擬機
- JVM 虛擬機器JVM虛擬機
- JVM虛擬機器JVM虛擬機
- 第五章:斷翼-虛擬機器棧虛擬機
- 全棧虛擬機器GraalVM初體驗全棧虛擬機LVM
- JVM 虛擬機器 GCJVM虛擬機GC
- Java虛擬機器(JVM)Java虛擬機JVM
- 《JVM第6課》本地方法棧JVM
- jvm HotSpot虛擬機器主要參數列JVMHotSpot虛擬機
- JVM虛擬機器詳解JVM虛擬機
- JVM虛擬機器基礎JVM虛擬機
- 解讀JVM虛擬機器JVM虛擬機
- jvm虛擬器JVM
- Java虛擬機器3:常用JVM命令引數Java虛擬機JVM
- 深入理解python虛擬機器:程式執行的載體——棧幀Python虛擬機
- JVM虛擬機器和類載入器JVM虛擬機
- Java虛擬機器(JVM)引數配置說明薦Java虛擬機JVM
- PHP使用棧完成高階計算器-接上文模擬棧PHP
- Java基礎:Java虛擬機器(JVM)Java虛擬機JVM
- JVM(JAVA虛擬機器介紹) (轉)JVMJava虛擬機
- JVM(JAVA虛擬機器介紹)(轉)JVMJava虛擬機
- xshell 連線本地虛擬機器很慢解決方法虛擬機
- Dalvik虛擬機器、Java虛擬機器與ART虛擬機器虛擬機Java
- JVM(7)-虛擬機器類載入機制JVM虛擬機
- JVM(五)----虛擬機器類載入機制JVM虛擬機
- 虛擬機器系列 | JVM類載入機制虛擬機JVM
- JVM內幕:Java虛擬機器詳解JVMJava虛擬機
- 面試篇:虛擬機器棧5連問,一聽心裡就樂了面試虛擬機
- kvm之三:本地安裝虛擬機器虛擬機
- VMware虛擬機器優化,提高虛擬機器執行速度的方法?虛擬機優化