更新时间:2020-10-09 17:25:49 来源:极悦 浏览1317次
由于不同平台内存模型的差异,有可能导致程序在不同平台的并发访问出错。Java内存模型(Java Memory Model,JMM)是屏蔽各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。而JVM内存模型无疑是Java内存模型的一个很好的体现方式。
1.JVM内存模型具体操作
定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量的底层细节。
此处的变量是指实例字段,静态字段和构成数组对象的元素,不包括局部变量与方法参数。
2.JVM内存模型主内存和工作内存
JVM内存模型规定所有的变量都存储在主内存中,每条线程还有自己的工作内存,工作内存保存了被该线程使用到的变量的主内存副本拷贝。
3. synchronization、final、volatile
(1) synchronization
① 互斥
对于一个monitor对象,当被一个线程持有,其他线程只能等待
② 可见性
保证了线程在同步代码块期间写入动作,对于后续进入该代码块的线程是可见的(持有相同monitor对象的线程)。
当前线程释放monitor对象,作用是把cpu缓存数据刷新到主内存中;其他线程进入该代码块时,需要获取monitor对象,会使cpu缓存失效,从而使变量从主内存中重新加载。
③ 禁止指令重排序
(2) final
① 禁止指令重排序
② 可见性
被final修饰的字段在构造器中一旦初始化完成,并且构造器没有把”this”引用传递出去(“this”引用逃逸是一件很危险的事情,其他线程有可能通过这个引用访问到”初始化了一半”的对象),那么其他线程就能看见final字段的值。
(3) volatile
① 可见性
② 禁止指令重排序
4.JVM内存模型示例
(1) 重排序
(2) 可见性
(3) 互斥性
以上就是对JVM内存模型的全面解析,相信即使是之前对JVM完全没有了解的小伙伴在看完本文后,也会有不小的收获,对JVM感兴趣的小伙伴可以观看本站的Java零基础教程,学习更多这方面的专业知识。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习