Java内存模型 常常在面试中问到,这一块要好好扫盲一下。
内存模型决定了 多线程编程正确性的判定,实用性上也是很值得好好调查一下。
这个问题这么重要,要好好了解一下。所谓知者不惑,有了让大家“知”的资料就不怕了。
〇、术语
1. 内存模式,wikipedia有这个词条
http://en.wikipedia.org/wiki/Memory_model
http://en.wikipedia.org/wiki/Memory_model_%28computing%29
内存模型描述的是 线程如何和内存交互。
2. Java内存模式
http://en.wikipedia.org/wiki/Java_Memory_Model
3. C内存模式(Intel内存模式)
http://en.wikipedia.org/wiki/C_memory_model
一、官方一手资料
Java规范中的信息
JMM的说明在Java语言规范 中给出了官方说明,在 17.4 Memory Model 一节,
http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.4
在JVM规范 中也有相关的内容,CHAPTER 8 Threads and Locks
http://java.sun.com/docs/books/jvms/second_edition/html/Threads.doc.html
规范中会提到Consistency model、Sequential Consistency等概念,参见下面的资料整理
http://blog.csdn.net/oldrat/archive/2010/08/10/5802803.aspx
二、经典书籍
–
1. 《Java并发编程实践》
第16章 Java存储模型,篇幅很少只有不到30面。
读JMM是为了写多线程,这本书整本都是在说并发编程,很多已经说清了,讲JMM自然可以少些。
非常推荐这本书,面向的是Java5,讲了并发编程的原则、模式和最佳实践。
这本书可以让你对并发编程的能力上一个Level。
如果你没有看过这本书,在并发的认识水平是有鸿沟的。(这句话引用GoF设计模式那本书的评价,呵呵~。)
# 如果你是大牛,请无视上面对本书的评价。
# 精通JVM规范 ,熟悉JVM实现 的大牛,自然是超出了讨论的Level。^_^
# 不过每次都从JVM实现,来指导Java并发编程,开发效率怕是不高,还是很推荐看看这本书。
这本书已经绝版,大家可以在这家Taobao店买到这本书 。
# 我可不是托,呵呵。在这家店买过书,这家的翻印的效果不错,价格也很好。
2. 《深入JVM》
第20章 线程同步
第9章 垃圾回收。和JMM不是很相关,但回收的是内存 ,所以也列上了。
这本书也绝版,还是那家Taobao店中可以买到这本书 。
–
三、辅助信息
–
1. IBM的developerworks上不错的信息
IBM的developerworks上信息的质量很高,可以好好看一下。
Java 理论与实践: 修复 Java 内存模型,第 1 部分
http://www.ibm.com/developerworks/cn/java/j-jtp02244/
Java 理论与实践: 修复 Java 内存模型,第 2 部分
http://www.ibm.com/developerworks/cn/java/j-jtp03304/
讲了内存模型,更重要的是讲了Java5在内存模型上的修复。这个问题也常常会问到。
Java 理论与实践: Mustang 中的同步优化
http://www.ibm.com/developerworks/cn/java/j-jtp10185/
Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制
http://www.ibm.com/developerworks/cn/java/j-jtp10264/
结合安全发布与有效的不可变性来提升性能
http://www.ibm.com/developerworks/cn/java/j-hashmap.html
Java 理论与实践: 变还是不变?
http://www.ibm.com/developerworks/cn/java/j-jtp02183/
讲到发布问题,编程实战中的重要问题。
Java 理论和实践: 安全构造技术
http://www.ibm.com/developerworks/cn/java/j-jtp0618/
轻松使用线程: 同步不是敌人
http://www.ibm.com/developerworks/cn/java/j-threads/
轻松使用线程: 减少争用
http://www.ibm.com/developerworks/cn/java/j-threads/index2.html
轻松使用线程: 不共享有时是最好的
http://www.ibm.com/developerworks/cn/java/j-threads/index3.html
Java 理论与实践: 并发集合类
http://www.ibm.com/developerworks/cn/java/j-jtp07233/
双重检查锁定及单例模式
http://www.ibm.com/developerworks/cn/java/j-dcl.html
IBM站点上对“Java 内存模型”的Google搜索页
结果包含了上面列出的内容
2. 其它
Java内存模型与volatile
http://jiangzhengjun.javaeye.com/blog/652532
Java内存模型 的 一个专题
挑些看吧,