java内存模型,简称JMM(Java Memory Model), 个人对于JMM理解是:JVM屏蔽了操作系统对于物理内存访问的复杂性,目的从软件设计角度呈现出的一种内存访问的逻辑视图 .也就是JMM是JVM为软件工程师提供的一系列内存访问的逻辑规则,理解并合理使用这些规则就能正确访问内存,至于底层和物理内存直接交互动作已经被透明化了,无须关心.下图是JMM内存模型视图,是内存访问规则的基础.-达内培训负责整理
主内存 : 主内存是 线程公有的 ,是所有线程都能访问的内存区域, 一般对应于java内存布局中的堆区.
工作内存 工作内存是 线程私有的 .一般对应于JVM虚拟机栈,以及本地方法栈
工作内存和主内存之分
从逻辑上看,如果没有主内存和工作内存的区分,只有一整块的内存,似乎也并无不妥. 那么区分主内存和工作内存的意义何在?
其中存储器则是我们所讨论的物理内存. CPU和内存之间的IO操作是存在瓶颈的,内存的操作速度远远小于CPU的运算速度 .在CPU和内存协同工作的场景中,CPU以较短的时间完成数值计算后,需要花较长的时间等待内存读取操作,造成了CPU运算资源的浪费. 于是,位于CPU和内存之间的高速缓存应运而生.
在引入了高速缓存之后,CPU会将运算所需要的数据一次性的加载到高速缓存中,高速缓冲具备比内存更快的存取速度.CPU和高速缓存之间配合大大提高了CPU资源的利用率. 此时在看工作内存和主内存关系,从逻辑上,高速缓存对应工作内存,每个线程分配到CPU时间片时,独自享有高速缓存的使用能力.主内存对应存储的物理内存.特别注意,这只是逻辑上的对等关系,物理的上具体对应关系十分复杂,这里不讨论.二丶工作内存和主内存之间的交互规则
工作内存和主内存之间协同工作才是JMM的核心部分.从上文描述中可以知道,工作内存是主内存部分内容的拷贝,在多线程环境中,可能存在多份主内存的拷贝. CPU是直接操作工作内存,最后将工作内存同步到主内存,这个过程会造成各个工作内存具备不一致性 . 为了在多线程环境下能实现工作内存中一致性,JMM定义了工作内存和主内存之间的交互操作,总共有8个原子性的交互操作
lock 锁操作,如果线程对内存中某个变量进行了lock,在同一时间将禁止其他所有线程对主内存中该变量进行读取操作.线程对应的工作内存和主内存之间禁止交互.
以上就是达内培训给大家做的内容详解,更多关于IT的学习,请继续关注达内培训