JVM內存模型和JAVA內存模型的區別

前言

很多人都以爲JAVA內存模型就是JVM內存模式,其實二者是不同的概念,本文針對此,主要講解JVM內存模型和JAVA內存模型的區別。

正文

其實本身二者就是不同的概念,在此我分開來講。

JVM內存模型

JVM內存模式主要分爲:程序計數器、JAVA虛擬機棧、本地方法棧、堆和方法區,其中JDK1.8之前方法區的實現爲永生代,而JDK1.8之後方法區的實現轉爲元空間。
各個內存區域的作用在很多博客和書籍上都有介紹,這裏就不做贅述(如讀者想進一步瞭解JVM方面的知識,可以看周志明的《深入拆解JVM》)。

Java內存模型

Java內存模型即Java Memory Model(JMM)。
JMM並不真實存在,而只是一個抽象的概念。JMM是和多線程相關的,更準確來說,JMM描述了一組規則或規範,這個規範定義了一個線程對共享變量的寫入時對另一個線程是可見的。

Java的多線程之間是通過共享內存進行通信的,而由於採用共享內存進行通信,在通信過程中會存在一系列如可見性、原子性、順序性等問題,而JMM就是圍繞着多線程通信以及與其相關的一系列特性而建立的模型。JMM定義了一些語法集,這些語法集映射到Java語言中就是volatile、synchronized等關鍵字。

在JMM中,我們把多個線程間通信的共享內存稱之爲主內存,而在併發編程中多個線程都維護了一個自己的本地內存(這是個抽象概念),其中保存的數據是主內存中的數據拷貝。而JMM主要是控制本地內存和主內存之間的數據交互的。
在這裏插入圖片描述

總結

多讀書,多思考,多總結!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章