Skip to content

Commit e02715d

Browse files
author
leelovejava
committed
volatlie指令重排
1 parent ddf0928 commit e02715d

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

docs/03/24.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# 24、你知道指令重排以及happens-before原则是什么吗?
2-
volatile关键字和有序性的关系,volatlie是如何保证有序性的,如何避免发生指令重排的
2+
volatile关键字和有序性的关系,`volatile`是如何保证有序性的,如何避免发生指令重排的
33

44
![volatile指令重排](images/24/01.png)
55

@@ -44,3 +44,21 @@ java中有一个`happens-before`原则:
4444
因为volatile要求的是,volatile前面的代码一定不能指令重排到volatile变量操作后面,volatile后面的代码也不能指令重排到volatile前面。
4545

4646
指令重排 -> happens-before -> volatile起到避免指令重排
47+
48+
---------------------
49+
个人笔记
50+
51+
1. 什么是重排序?
52+
为了提高性能,编译器和处理器常常会对既定的代码执行顺序进行指令重排序。
53+
54+
2. 重排序的类型有哪些呢?源码到最终执行会经过哪些重排序呢?
55+
56+
在不改变程序执行结果的前提下,尽可能提高执行效率。
57+
58+
* 编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序;
59+
* 指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序;
60+
* 内存系统的重排序。由于处理器使用缓存和读/写缓冲区,这使得加载和存储操作看上去可能是在乱序执行的。
61+
62+
![源码到最终执行经过的重排序](images/24/03.png)
63+
64+
3. `happens-before`在什么情况下不进行指令重排

docs/03/images/24/03.png

36.2 KB
Loading

0 commit comments

Comments
 (0)