Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit0519056

Browse files
committed
Jvm总结
1 parent01f5b73 commit0519056

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

‎docs/jvm/JMM保证.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
2+
3+
#JMM保证
4+
5+
如下图所示,来看 JMM 如何保证原子性、可见性,有序性。
6+
7+
​ <imgsrc="http://s0.lgstatic.com/i/image2/M01/8A/BB/CgoB5l14lumAex05AAB83iBktjQ024.png"alt="img"style="zoom:50%;" />
8+
9+
**原子性**
10+
JMM 保证对除 long 和 double 外的基础数据类型的读写操作是原子性的。另外关键字 synchronized 也可以提供原子性保证。synchronized 的原子性是通过 Java 的两个高级的字节码指令 monitorenter 和 monitorexit 来保证的。
11+
12+
**可见性**
13+
JMM 可见性的保证,一个是通过 synchronized,另外一个就是 volatile。volatile 强制变量的赋值会同步刷新回主内存,强制变量的读取会从主内存重新加载,保证不同的线程总是能够看到该变量的最新值。
14+
15+
**有序性**
16+
对有序性的保证,主要通过 volatile 和一系列 happens-before 原则。volatile 的另一个作用就是阻止指令重排序,这样就可以保证变量读写的有序性。
17+
18+
happens-before 原则包括一系列规则,如:
19+
20+
1. 程序顺序原则,即一个线程内必须保证语义串行性;
21+
22+
2. 锁规则,即对同一个锁的解锁一定发生在再次加锁之前;
23+
24+
3. happens-before 原则的传递性、线程启动、中断、终止规则等。

‎docs/jvm/JMM内存可见性.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#JMM内存可见性
2+
3+
JMM 是 Java 内存模型,与刚才讲到的 JVM 内存模型是两回事,JMM 的主要目标是定义程序中变量的访问规则,如下图所示,所有的共享变量都存储在主内存中共享。每个线程有自己的工作内存,工作内存中保存的是主内存中变量的副本,线程对变量的读写等操作必须在自己的工作内存中进行,而不能直接读写主内存中的变量。
4+
5+
<imgsrc="http://s0.lgstatic.com/i/image2/M01/8A/DB/CgotOV14lumATjNyAAB-0Ie_3x8688.png"alt="img"style="zoom:67%;" />
6+
7+
在多线程进行数据交互时,例如线程 A 给一个共享变量赋值后,由线程 B 来读取这个值,A 修改完变量是修改在自己的工作区内存中,B 是不可见的,只有从 A 的工作区写回主内存,B 再从主内存读取自己的工作区才能进行进一步的操作。由于指令重排序的存在,这个写—读的顺序有可能被打乱。因此 JMM 需要提供原子性、可见性、有序性的保证。

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp