java内存模型到底如何理解

   面试被问到java内存模型了,我直接回答了,内存模型的组成:虚拟机栈、本地方法栈、方法区、堆、程序计数器;面试官说,出门右拐,我就不送了。。

一路上我的心都在滴血,咋地,甲骨文都背错了了吗?????

回来又好好百度了一番,果然是我大意了。

  1、java内存模型,原名 JMM。很多文章,对于java内存模型定义并没有给出具体的词语解释,我觉得这是不太友好的,可以把解释说的难懂一些,

无所谓,再加上详细的解析就可以了。这里我想表达一种名词解释,java内存模型就是为了解决多线程环境下,数据一致协议的一套机制规范。这其实就会

涉及很多方面首先是多线程,其次是一致性,隐含的就是可见性,以及性能问题。所有这些问题都需要有一套规范来解决,可能解决方案不是特别完美,

但是这也是一个升级的过程,当前的java内存模型已经做得很好了。

  2、就是面试官在问这个问题后,我们该怎么聊下去呢?

我觉得可以这么回答,java内存模型是一套解决数据可见性,有序性的协议规范,正常情况下,数据都是在主内存中,而为了实现高效的读取,对于java

内存模型来说,每个线程会维护自己的缓存数据,也就是说,每个线程其实操作的数据是一个变量副本,在操作结束后,再将新数据写回到主内存。那么

这个过程中就会有很多问题存在,比如说数据一致性,可见性,原子性等等,为了解决这些问题,java提供了一些关键字来让用户在使用过程中显示的避

免这些问题。比如happens-before原则、sychronizd  、volatile

  3、这两个关键字的实现原理,这里就不说了,我感觉网上的比我讲的好多了,比较我是个半吊子,以上内容如有不当之处,还请不吝指正。

参考:

https://blog.csdn.net/zwx900102/article/details/106306915

 

posted @ 2021-12-01 16:41  0o飞行天下o0  阅读(48)  评论(0编辑  收藏  举报