Java内存模型解决了并发编程中的可见性和有序性问题
可见性产生原因是CPU缓存,有序性产生原因是编译优化
解决可见性和有序性问题的最直接方法是禁用缓存和编译优化,但这样性能堪忧,合理的是按需禁用缓存以及编译优化
Java 内存模型规范了 JVM 如何提供按需禁用缓存和编译优化的方法,包括包括 volatile、synchronized 和 final 三个关键字,以及六项 Happens-Before 规则
Java 内存模型在 1.5 版本对 volatile 语义进行了增强,添加了HappensBefore 规则