首先是它是什么:
JMM 即 Java 内存模型(Java Memory Model),它定义了 Java 程序中各种变量在内存中的存储和访问规则,以及线程之间如何通过内存进行通信。
其次他的作用是什么:
JMM 的主要目的是解决多线程环境下的内存可见性、原子性和有序性问题。
内存可见性方面,确保一个线程对共享变量的修改能够及时被其他线程看到。原子性规定了不可分割的操作在执行过程中不会被中断。有序性则保证了程序执行的顺序符合预期。
以及他的示意图:
他主要分为两个部分:主内存和本地内存
其中主内存是各个线程互相交流的地方,读取共享变量的地方,各个线程共享。
本地内存:是每个线程私有的,用来存放线程自己独有的数据。
本地内存**存储了该线程以读 / 写共享变量的副本。**每个线程只能操作自己本地内存中的变量,无法直接访问其他线程的本地内存。如果线程间需要通信,必须通过主内存来进行。
引用guide哥一张图片进行表达。
最后:
Java 内存区域和 JMM 有何区别?
Java 内存区域和内存模型是完全不一样的两个东西:JVM 内存结构和 Java 虚拟机的运行时区域相关,定义了 JVM 在运行时如何分区存储程序数据,就比如说堆主要用于存放对象实例。Java 内存模型和 Java 的并发编程相关,抽象了线程和主内存之间的关系就比如说线程之间的共享变量必须存储在主内存中,规定了从 Java 源代码到 CPU 可执行指令的这个转化过程要遵守哪些和并发相关的原则和规范,其主要目的是为了简化多线程编程,增强程序可移植性的。