Skip to content

Commit f7a660c

Browse files
committed
更新JMM
1 parent bcf4bd0 commit f7a660c

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

MD/Java基础-JVM原理.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,16 @@ GC Roots包括:虚拟机栈中引用的对象、方法区中类静态属性引
9494
2. 老年代空间不足(通过Minor GC后进入老年代的大小大于老年代的可用内存)
9595
3. 方法区空间不足
9696

97-
## Java内存模型
98-
主内存:所有变量都保存在主内存中
99-
工作内存:每个线程的独立内存,保存了该线程使用到的变量的主内存副本拷贝,线程对变量的操作必须在工作内存中进行
97+
## [Java内存模型](https://mp.weixin.qq.com/s/ME_rVwhstQ7FGLPVcfpugQ)
98+
定义:JMM是一种规范,目的是解决由于多线程通过共享内存进行通信时,存在的本地内存数据不一致、编译器会对代码指令重排序、处理器会对代码乱序执行等带来的问题。目的是保证并发编程场景中的原子性、可见性和有序性
99+
100+
实现:volatile、synchronized、final、concurrent包等。其实这些就是Java内存模型封装了底层的实现后提供给程序员使用的一些关键字
100101

101102
![](https://github.com/xbox1994/2018-Java-Interview/raw/master/images/j12.jpg)
102103

104+
主内存:所有变量都保存在主内存中
105+
工作内存:每个线程的独立内存,保存了该线程使用到的变量的主内存副本拷贝,线程对变量的操作必须在工作内存中进行
106+
103107
每个线程都有自己的本地内存共享副本,如果A线程要更新主内存还要让B线程获取更新后的变量,那么需要:
104108

105109
1. 将本地内存A中更新共享变量

0 commit comments

Comments
 (0)