Java内存模型(JMM) 资料整理

本文详细介绍了Java内存模型(JMM)的基本概念,包括主内存和工作内存的区别,以及它们在线程间交互中的作用。同时,文章提供了官方文档链接,并推荐了几本深入理解JMM的经典书籍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java的内存模型JMM(Java Memory Model)JMM主要是为了规定了线程和内存之间的一些关系。根据JMM的设计,系统存在一个主内存(Main Memory),Java中所有实例变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存由缓存和堆栈两部分组成,缓存中保存的是主存中变量的拷贝,缓存可能并不总和主存同步,也就是缓存中变量的修改可能没有立刻写到 主存中;堆栈中保存的是线程的局部变量,线程之间无法相互直接访问堆栈中的变量

 

 

〇、术语

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.youkuaiyun.com/oldrat/archive/2010/08/10/5802803.aspx

二、经典书籍

 -

1. 《Java并发编程实践》

China-pub上的链接

第16章 Java存储模型,篇幅很少只有不到30面。

读JMM是为了写多线程,这本书整本都是在说并发编程,很多已经说清了,讲JMM自然可以少些。

非常推荐这本书,面向的是Java5,讲了并发编程的原则、模式和最佳实践。

这本书可以让你对并发编程的能力上一个Level。

如果你没有看过这本书,在并发的认识水平是有鸿沟的。(这句话引用GoF设计模式那本书的评价,呵呵~。)

# 如果你是大牛,请无视上面对本书的评价。

# 精通JVM规范 ,熟悉JVM实现 的大牛,自然是超出了讨论的Level。^_^

# 不过每次都从JVM实现,来指导Java并发编程,开发效率怕是不高,还是很推荐看看这本书。

这本书已经绝版,大家可以在这家Taobao店买到这本书

# 我可不是托,呵呵。在这家店买过书,这家的翻印的效果不错,价格也很好。


2. 《深入JVM》

China-pub上的链接

第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搜索页

结果包含了上面列出的内容

http://www.google.com.hk/search?hl=zh-CN&safe=strict&q=Java+%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8B+site%3Aibm.com&aq=f&aqi=&aql=&oq=&gs_rfai=

2. 其它

Java内存模型与volatile

http://jiangzhengjun.javaeye.com/blog/652532

 

http://blog.youkuaiyun.com/axman/archive/2006/08/19/1097541.aspx

 

Java内存模型 的 一个专题

挑些看吧,

http://www.soidc.net/topic/java+%C4%DA%B4%E6%C4%A3%D0%CD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值