File tree Expand file tree Collapse file tree 2 files changed +19
-1
lines changed Expand file tree Collapse file tree 2 files changed +19
-1
lines changed Original file line number Diff line number Diff line change 1
1
# 24、你知道指令重排以及happens-before原则是什么吗?
2
- volatile关键字和有序性的关系,volatlie是如何保证有序性的 ,如何避免发生指令重排的
2
+ volatile关键字和有序性的关系,` volatile ` 是如何保证有序性的 ,如何避免发生指令重排的
3
3
4
4
![ volatile指令重排] ( images/24/01.png )
5
5
@@ -44,3 +44,21 @@ java中有一个`happens-before`原则:
44
44
因为volatile要求的是,volatile前面的代码一定不能指令重排到volatile变量操作后面,volatile后面的代码也不能指令重排到volatile前面。
45
45
46
46
指令重排 -> 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 ` 在什么情况下不进行指令重排
You can’t perform that action at this time.
0 commit comments