Java学习之Java内存模型
Walker_zmc
Java开发
展开
-
Java内存模型学习:七、总结
转载自https://www.infoq.cn/article/java-memory-model-7/ 处理器内存模型 顺序一致性内存模型是一个理论参考模型,JMM 和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM 和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和 JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能...转载 2020-03-10 15:25:14 · 88 阅读 · 0 评论 -
Java内存模型学习:六、final
转载自https://www.infoq.cn/article/java-memory-model-6/ 与前面介绍的锁和 volatile 相比较,对 final 域的读和写更像是普通的变量访问。对于 final 域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个 final 域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 初次读一个包含 f...转载 2020-03-10 15:18:13 · 97 阅读 · 0 评论 -
Java内存模型学习:五、锁
转载于https://www.infoq.cn/article/java-memory-model-5/ 锁的释放 - 获取建立的 happens before 关系 锁是 java 并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 下面是锁释放 - 获取的示例代码: class MonitorExample { int a...转载 2020-03-10 15:03:58 · 120 阅读 · 0 评论 -
Java内存模型学习:volatile
转载自https://www.infoq.cn/article/java-memory-model-4/ volatile 的特性 当我们声明共享变量为 volatile 后,对这个变量的读 / 写将会很特别。理解 volatile 特性的一个好方法是:把对 volatile 变量的单个读 / 写,看成是使用同一个监视器锁对这些单个读 / 写操作做了同步。下面我们通过具体的示例来说明,请看下面...转载 2020-03-10 14:52:07 · 88 阅读 · 0 评论 -
Java内存模型学习:三、顺序一致性
转载自https://www.infoq.cn/article/java-memory-model-3/ 数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争。java 内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序。 当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一...转载 2020-03-10 14:31:57 · 122 阅读 · 0 评论 -
Java内存模型学习:重排序
转载于https://www.infoq.cn/article/java-memory-model-2/ 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型: 名称 代码示例 说明 写后读 a = 1;b = a; 写一个变量之后,再读这个位置。 写后写 a = 1;a = 2...转载 2020-03-10 13:48:40 · 84 阅读 · 0 评论 -
Java内存模型学习:一、Java内存模型入门
为什么要有内存模型 在介绍Java内存模型之前,先来看一下到底什么是计算机内存模型,然后再来看Java内存模型在计算机内存模型的基础上做了哪些事情。要说计算机的内存模型,就要说一下一段古老的历史,看一下为什么要有内存模型。 内存模型,英文名Memory Model,他是一个很老的老古董了。他是与计算机硬件有关的一个概念。那么我先给你介绍下他和硬件到底有啥关系。 CPU和缓存一致性 我们应该...转载 2020-03-10 13:36:30 · 214 阅读 · 0 评论