程序計數器java
它的做用能夠看做是當前線程所執行的字節碼的行號指示器,字節碼解釋器工做時就是經過改變這個計數器的值來選取下一條須要執行的字節碼指令、分支、循環、跳轉、異常處理、線程恢復等基礎功能都須要依賴這個計數器來完成
java 虛擬機棧數據結構
與程序計數器同樣,java虛擬機棧也是線程私有的,它的生命週期與現場相同,虛擬機棧描述的是Java方法執行的內存模型,每一個方法執行的時候都會建立一個棧幀(Stack frame) ,用於存儲局部變量表、操做棧、動態連接、方法出口等信息,每一個方法被調用直到執行完畢的過程,就對應着一個棧幀在虛擬機棧中從入棧到出棧的過程
本地方法棧線程
本地方法棧和虛擬機棧發揮的做用是很是類似的,區別不過是虛擬機棧爲虛擬機執行方法服務,而本地方法棧則是虛擬機使用到的native方法服務,虛擬機規範中對本地方法棧中的方法使用的語言,使用方式和數據結構並無強制規定,所以具體的虛擬機能夠自由實現它,甚至有的虛擬機 Sun HotSpot就直接把本地方法棧和虛擬機棧合二爲一,與虛擬機棧同樣本地方法棧也會拋出StackOverflowError和OutofMemoryError異常.