Java代碼是要運行在虛擬機上的,而虛擬機在執行Java程序的過程當中會把所管理的內存劃分爲若干個不一樣的數據區域,這些區域都有各自的用途。其中有些區域隨着虛擬機進程的啓動而存在,而有些區域則依賴用戶線程的啓動和結束而創建和銷燬。編程
結構以下:多線程
JVM內存結構:由Java虛擬機規範定義,描述的是Java程序執行過程當中,由JVM管理的不一樣數據區域,各個區域有其特定的功能。併發
Java Memory Model(JMM)JMM並不像JVM內存結構同樣是真實存在,它只是一個抽象的概念。spa
JMM是和多線程相關的,它描述了一組規則或規範,這個規範定義了一個線程對共享變量的寫入時對另外一個線程是可見的。線程
JMM定義了一些語法集,這些語法集映射到Java語言中就是volatile、synchronized等關鍵字。對象
Java對象在JVM中的存儲也是有必定結構的,這個Java對象自身的存儲模型稱之爲Java對象模型。blog
JVM內存結構,和Java虛擬機的運行時區域有關。 進程
Java內存模型,和Java的併發編程有關。 內存
Java對象模型,和Java對象在虛擬機中的表現形式有關。get