通常聊JVM內存模型都是把圖截出來,而後對着圖,解釋上面堆、棧之類的概念。這篇將分享下,如何從編程的本質上理解,JVM內存模型是什麼樣子,爲何是這個樣子,再也不死記硬背。算法
編程的本質是什麼,有這麼一句話,程序=算法+數據結構。
這裏的"算法"其實至關寬泛,而平時理解的算法是指諸如排序、查找等操做,相對狹隘。因此換一個解釋,咱們把算法解釋爲對數據執行操做,簡稱執行。
這樣,程序的本質即是數據+執行。
而JVM做爲JAVA程序的執行載體,必然從邏輯上與其相對應。編程
所以,JVM內存模型能夠分爲這麼兩部分:數據區、執行區。
數組
任何程序,不管實現語言,它的數據老是可分爲兩類:元數據和業務數據。數據結構
執行部分,首先咱們得理解程序執行的基本單位是什麼,是方法(或稱函數)。
一般的程序入口是main方法,單元測試也是基於方法。
平時交流時,也會說調下這個對象的方法,而不是調下這個對象。
甚至還有專門的函數式編程。
而在Java中,方法分爲兩種:Java方法和Native方法
在內存模型中,Java方法對應Java虛擬機棧(Java Virtual Machine Stacks),Native方法對應本地方法棧(Native Method Stack)
書中解釋以下:jvm
本地方法棧爲虛擬機使用Native方法服務。
除此以外,再加上程序計數器(Program Counter Register),爲當前線程所執行的字節碼的提供行號指示。
主要的內存模型就畫出來了。
其中,數據區是通用的,因此線程共有,而執行區是線程執行本身的,因此線程私有。函數式編程
再加上真正去執行程序的執行引擎,連接本地方法庫,JVM內存模型就很好理解了。
對比下書上的結構,邏輯上一致。
以上。函數
《深刻理解Java虛擬機》單元測試