1. 程式人生 > >【深入理解java虛擬機器】第0集--Java記憶體區域和java記憶體模型

【深入理解java虛擬機器】第0集--Java記憶體區域和java記憶體模型

首先我們清楚【記憶體區域】和【記憶體模型】是兩個不一樣的概念。當時我電面阿里的時候,面試官讓我講講記憶體模型的理解,我巴拉巴拉說了一通方法區-堆分割槽,垃圾演算法,面試官耐心的聽我說完就把電話掛了。

【記憶體區域】對應的是jvm程序。jvm啟動之後,自身是一個大的程序,作業系統會根據jvm的記憶體配置引數分配給jvm程序相應大小的記憶體區域,對於32位作業系統的限制,單個程序最大的記憶體分配是2G(書上寫的,不知道如何驗證),那64位的可能就要大一倍4G。所以我們在32位作業系統上啟動JVM,JVM最大的記憶體分配有2G。記憶體區域被分配之後,需要按照jvm的規則劃分成不同的儲存區域。堆-方法區-程式計數器-虛擬機器棧-本地方法棧。

【記憶體模型】;java記憶體模型很有意思,是對應java執行緒的儲存概念。對於作業系統來說,程序下面可以有多個執行緒共享程序的記憶體。那麼java執行緒也可以共享JVM的記憶體區域。對於Java的記憶體模型,主要是表述java執行緒執行時的記憶體模型:規定了執行緒併發時對於共享記憶體的存取規則。

那其實我們大家知道,線上程呼叫某個方法時,如果需要讀取共享變數--堆內的物件或者是方法區的類資訊或者是方法區內的敞亮資訊,都要拷貝一份資料到執行緒私的工作記憶體,多個執行緒訪問同一個貢獻變數的時候,就產生的併發問題,為了保證資料一致性,才有了Java記憶體模型規定的讀取規則。

參考資料--《深入理解JVM》;

HelloWorld、、--《java記憶體區域與java記憶體模型》