Skip to content

Commit 2cdd584

Browse files
JMM
1 parent 181d551 commit 2cdd584

File tree

15 files changed

+188
-1
lines changed

15 files changed

+188
-1
lines changed

JMM/JMM.iml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module type="JAVA_MODULE" version="4">
3+
<component name="NewModuleRootManager" inherit-compiler-output="true">
4+
<exclude-output />
5+
<content url="file://$MODULE_DIR$">
6+
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
7+
</content>
8+
<orderEntry type="inheritedJdk" />
9+
<orderEntry type="sourceFolder" forTests="false" />
10+
</component>
11+
</module>

JMM/src/JmmSummary.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* 内存模型总结与问题
3+
*
4+
* @Author: zzStar
5+
* @Date: 10-19-2020 16:09
6+
*/
7+
public class JmmSummary {
8+
9+
/**
10+
* JVM内存结构,和Java虚拟机的运行时区域有关
11+
* -> 运行时数据区(方法区,堆 | Java栈,本地方法栈,程序计数器)
12+
*
13+
* Java内存模型,和Java的并发编程有关
14+
* -> 实际上是一组规范,需要各个JVM的实现来遵守JMM规范,以便于开发者可以利用这些规范,更方便地开发多线程程序
15+
* -> JVM是工具类和关键字的原理,volatile、synchronized、lock等原理都是JVM
16+
* -> 没有JVM,就需要自己指定什么时候用内存栅栏(如工作内存和主内存之间的拷贝与同步)
17+
*
18+
* Java对象模型,和Java对象在虚拟机中的表现形式有关
19+
* -> 栈,堆,方法区
20+
*/
21+
22+
/**
23+
* 为什么会有可见性问题❓
24+
* -> CPU有多级缓存,导致读的数据过期
25+
* 1.高速缓存的容量比主内存小,但是速度仅次于寄存器,所有在CPU和主内存之间就多了Cache层
26+
* 2.线程间的对于共享变量的可见性问题不是直接由多核引起的,而是由多缓存引起的
27+
*/
28+
29+
/**
30+
* 所以,Java屏蔽了这些底层细节,JMM定义了一套读写内存数据的规范,JMM抽象了主内存和本地内存的概念
31+
* 其中,本地内存并不是真的是一块给每个线程分配的内存,而是JMM的一个抽象,是对于寄存器、一级缓存、二级缓存等的抽象
32+
*/
33+
34+
35+
/**
36+
* 主内存和本地内存的关系
37+
* -> 所有变量都存储在主内存中,同时每个线程也有自己独立的工作内存,工作内存中的变量内容是主内存中的拷贝
38+
* -> 线程不能直接读写主内存中的变量,而是只能❗操作自己工作内存中的变量,然后再同步到主内存中
39+
* -> 主内存是多个线程共享的,但线程间不共享工作内存,如果线程间需要通信,必须借助主内存中转❗来完成
40+
*
41+
* 所有的共享变量存在于主内存中,每个线程有自己的本地内存,而且线程读写共享数据也是通过本地内存交换的,所有才导致了可见性问题
42+
*/
43+
44+
}

JMM/src/MemoryOfJMM.png

689 KB
Loading

JMM/src/ObjectModel.png

402 KB
Loading

JMM/src/happendsbefore/Join.png

256 KB
Loading

JMM/src/happendsbefore/Lock.png

134 KB
Loading
296 KB
Loading
142 KB
Loading
251 KB
Loading
195 KB
Loading

0 commit comments

Comments
 (0)