Java Memory Model文档资源整理

555 阅读1分钟

1.什么是Java内存模型

  Java内存模型描述了线程该如何和内存进行交互。多核、不同jvm实现以及不同的cpu,这是java代码运行的环境。如何让这些因素对用户透明并且保证程序运行正确是java内存模型需要解决的问题。

2.JSR 133

  最早的jmm是95年提出的,但是已经无法满足需要。jsr133更新了jmm,jsr133可以参考大神 Doug Lea的文章。这篇文章是为编译器编写者写的一份指南,里面的内容很丰富,当然也很难懂。Java Concurrency In Practice的作者的文章也是非常的棒的。

3.指令重排

  学过计算机体系结构的,大概都知道现代cpu是流水线的,但是两个指令之间会存在这依赖关系,所以需要进行优化。指令的重排(instruction reordering)就是一种优化的方式。指令重排可能是编译器在编译的时候就帮我们做好的,有的是jvm在执行的时候帮我们做的。

4.Double-Checked Locking is Broken

  volatile关键字到底做了什么?很多人会和你说内存可见性,仅仅是这个吗?那你可能需要读一下这篇文章了。这篇文章提到了volatile还会防止指令重排。

5.Atomic包里面的set vs lazySet

  官方关于这个方法的介绍简直少得你怀疑人生,不过可以参考一下stack