JVM内存模型 - 极悦
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 JVM内存模型

JVM内存模型

更新时间:2020-10-09 17:25:49 来源:极悦 浏览1317次

 由于不同平台内存模型的差异,有可能导致程序在不同平台的并发访问出错。Java内存模型(Java Memory Model,JMM)是屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。而JVM内存模型无疑是Java内存模型的一个很好的体现方式。


1.JVM内存模型具体操作

定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量的底层细节。

此处的变量是指实例字段,静态字段和构成数组对象的元素,不包括局部变量与方法参数。


2.JVM内存模型主内存和工作内存

JVM内存模型规定所有的变量都存储在主内存中,每条线程还有自己的工作内存,工作内存保存了被该线程使用到的变量的主内存副本拷贝。

image.png



3. synchronization、final、volatile

(1) synchronization

① 互斥

    对于一个monitor对象,当被一个线程持有,其他线程只能等待

② 可见性

    保证了线程在同步代码块期间写入动作,对于后续进入该代码块的线程是可见的(持有相同monitor对象的线程)。

    当前线程释放monitor对象,作用是把cpu缓存数据刷新到主内存中;其他线程进入该代码块时,需要获取monitor对象,会使cpu缓存失效,从而使变量从主内存中重新加载。

③ 禁止指令重排序


(2) final

① 禁止指令重排序

② 可见性

    被final修饰的字段在构造器中一旦初始化完成,并且构造器没有把”this”引用传递出去(“this”引用逃逸是一件很危险的事情,其他线程有可能通过这个引用访问到”初始化了一半”的对象),那么其他线程就能看见final字段的值。


(3) volatile

① 可见性

② 禁止指令重排序


4.JVM内存模型示例

(1) 重排序

image.png


(2) 可见性

image.png


(3) 互斥性

image.png


以上就是对JVM内存模型的全面解析,相信即使是之前对JVM完全没有了解的小伙伴在看完本文后,也会有不小的收获,对JVM感兴趣的小伙伴可以观看本站的Java零基础教程,学习更多这方面的专业知识。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>