Java虛擬機的內存模型

#1、JVM內存區域
輸入圖片說明
程序計數器html

程序計數器是線程私有的區域,每一個線程固然得有個計數器記錄當前執行到那個指令。佔用的內存空間小,能夠把它當作是當前線程所執行的字節碼的行號指示器。若是線程在執行Java方法,這個計數器記錄的是正在執行的虛擬機字節碼指令地址;若是執行的是Native方法,這個計數器的值爲空(Undefined)。此內存區域是惟一一個在Java虛擬機規範中沒有規定任何OutOfMemoryError狀況的區域。算法

Java虛擬機棧函數

與程序計數器同樣,Java虛擬機棧也是線程私有的。其生命週期與線程相同。如何理解虛擬機棧呢?本質上來說,就是個棧。裏面存放的元素叫棧幀,棧幀好像很複雜的樣子,其實它很簡單!它裏面存放的是一個函數的上下文,具體存放的是執行的函數的一些數據。執行的函數須要的數據無非就是局部變量表(保存函數內部的變量)、操做數棧(執行引擎計算時須要),方法出口等等。 執行引擎每調用一個函數時,就爲這個函數建立一個棧幀,並加入虛擬機棧。換個角度理解,每一個函數從調用到執行結束,實際上是對應一個棧幀的入棧和出棧。線程

本地方法棧htm

本地方法棧與虛擬機棧所發揮的做用很類似,他們的區別在於虛擬機棧爲執行Java代碼方法服務,而本地方法棧是爲Native方法服務。與虛擬機棧同樣,本地方法棧也會拋出StackOverflowError和OutOfMemoryError異常。對象

Java堆blog

Java堆能夠說是虛擬機中最大一塊內存了。它是全部線程所共享的內存區域,幾乎全部的實例對象都是在這塊區域中存放。固然,隨着JIT編譯器的發展,全部對象在堆上分配漸漸變得不那麼「絕對」了。 Java堆是垃圾收集器管理的主要區域。因爲如今的收集器基本上採用的都是分代收集算法,全部Java堆能夠細分爲:新生代和老年代。在細緻分就是把新生代分爲:Eden空間、From Survivor空間、To Survivor空間。當堆沒法再擴展時,會拋出OutOfMemoryError異常。生命週期

方法區圖片

方法區存放的是類信息、常量、靜態變量等。方法區是各個線程共享區域,很容易理解,咱們在寫Java代碼時,每一個線程度能夠訪問同一個類的靜態變量對象。內存

#Thanks http://www.cnblogs.com/bigbigheart/p/6009565.html

相關文章
相關標籤/搜索