天天看點

JAVA記憶體模型與JVM記憶體模型的差別

**

JAVA記憶體模型與JVM記憶體模型的差別

**

直接進入正題

**JAVA記憶體模型:

Java記憶體模型規定所有的變量都是存在主存中,每個線程都有自己的工作記憶體。線程堆變量的操作都必須在工作記憶體進行,不能直接堆主存進行操作,并且每個線程不能通路其他線程的工作記憶體。

Java記憶體模型的Volatile關鍵字,原子性、可見性、有序性 詳情

**JVM記憶體模型:

虛拟機棧:用來放局部變量、堆區對象的引用和常量池對象的引用;但對象本身不存放在棧中,而是存放在堆(new出來的對象)或者常量池中(對象可能在常量池裡)(字元串常量對象存放在常量池中。);

方法區:存放類的資訊;此區包含常量池(常量池用來放基本類型常量和字元串類型常量),此部分可以回收;方法區可以放用static修飾的變量,但此部分不能回收,因為方法區也叫持久帶,永久帶基本不參與垃圾回收;

堆::存放一些new出的對象(包含成員變量),和數組。但發生方法逃逸了就不會儲存堆裡面了。

關于記憶體模型的圖檔:

JAVA記憶體模型與JVM記憶體模型的差別