JVM内存模型和JAVA内存模型的区别
前言
很多人都以為JAVA內(nèi)存模型就是JVM內(nèi)存模式,其實二者是不同的概念,本文針對此,主要講解JVM內(nèi)存模型和JAVA內(nèi)存模型的區(qū)別。
正文
其實本身二者就是不同的概念,在此我分開來講。
JVM內(nèi)存模型
JVM內(nèi)存模式主要分為:程序計數(shù)器、JAVA虛擬機棧、本地方法棧、堆和方法區(qū),其中JDK1.8之前方法區(qū)的實現(xiàn)為永生代,而JDK1.8之后方法區(qū)的實現(xiàn)轉(zhuǎn)為元空間。
各個內(nèi)存區(qū)域的作用在很多博客和書籍上都有介紹,這里就不做贅述(如讀者想進一步了解JVM方面的知識,可以看周志明的《深入拆解JVM》)。
Java內(nèi)存模型
Java內(nèi)存模型即Java Memory Model(JMM)。
JMM并不真實存在,而只是一個抽象的概念。JMM是和多線程相關(guān)的,更準確來說,JMM描述了一組規(guī)則或規(guī)范,這個規(guī)范定義了一個線程對共享變量的寫入時對另一個線程是可見的。
Java的多線程之間是通過共享內(nèi)存進行通信的,而由于采用共享內(nèi)存進行通信,在通信過程中會存在一系列如可見性、原子性、順序性等問題,而JMM就是圍繞著多線程通信以及與其相關(guān)的一系列特性而建立的模型。JMM定義了一些語法集,這些語法集映射到Java語言中就是volatile、synchronized等關(guān)鍵字。
在JMM中,我們把多個線程間通信的共享內(nèi)存稱之為主內(nèi)存,而在并發(fā)編程中多個線程都維護了一個自己的本地內(nèi)存(這是個抽象概念),其中保存的數(shù)據(jù)是主內(nèi)存中的數(shù)據(jù)拷貝。而JMM主要是控制本地內(nèi)存和主內(nèi)存之間的數(shù)據(jù)交互的。
總結(jié)
多讀書,多思考,多總結(jié)!
總結(jié)
以上是生活随笔為你收集整理的JVM内存模型和JAVA内存模型的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根据进程名杀掉进程
- 下一篇: 最近做了一个安装包的安装流程图