JSR 133 Java内存模型以及并发编程的最权威论文汇总

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/21aspnet/article/details/88772062

Java内存模型

先看官方文档:

https://docs.oracle.com/javase/specs/

JSR 133:Java TM内存模型和线程规范修订版:https://www.jcp.org/en/jsr/detail?id=133

JSR:Java规范请求所有JSR的列表:https://jcp.org/en/jsr/all

https://www.jcp.org/en/home/index

JSR是Java Specification Requests的缩写,意思是Java 规范请求。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。

----------

JSR-000133 Java TM内存模型和线程规范修订版 (最终版本):

https://www.jcp.org/aboutJava/communityprocess/final/jsr386/index.html

http://www.cs.umd.edu/~pugh/jmm.pdf

http://openjdk.java.net/jeps/188

该JEP的产品将被放置在 OpenJDK Wiki上。该过程主要在专门的OpenJDK邮件列表上进行。我们希望结果包括以下内容:

  1. 改进了形式化。将重新制定基础模型的部分内容。我们的目标是修改后的模型可以进行机械检查,并且更易于人类理解。当根据JLS第17章更新措辞时,这也将解决许多学术论文中指出的现有错误。(最早见 David Aspinall和JaroslavŠevčík撰写的“Java内存模型示例:好,坏,丑”

  2. JVM覆盖范围。现有规范侧重于语言级构造。这使得一些问题(例如初始化)未完全定义,特别是对于在JVM上运行的其他语言。这些将通过将核心模型建立在最小字节代码和内在函数集上来解决。

  3. 扩展范围。现有规范明确涵盖Java线程,锁,监视器以及volatile和final字段。但是,自Java SE 5以来,添加的功能无法在这些术语中严格指定(例如,AtomicX.weakCompareAndSet)。必须解决这些问题。我们还预计在其他即将到来的JEP过程中可能会出现进一步的扩展。

  4. C11 / C ++ 11兼容性。C ++ 11和C11标准改编了JSR 133 JMM规范工作的想法。但是,他们还扩展了它们以涵盖仅在JSR 133(见上文)之后已经(或可能)添加到Java的构造。部分原因是因为Java程序可能调用C本机库,所以应该是等效结构具有跨语言的兼容规范的情况。我们将进一步探索是否可以建立跨语言约定以确保这些构造的低级实现在公共平台上兼容。

  5. 实施指南。JVM实现者,JDK库开发人员和开发人员通常发现依赖于解释JMM如何影响特定问题和解决方案的文档很有用。我们打算提供这样的文件。

  6. 测试支持。符合内存模型要求很难测试。我们希望与工程师一起设计和实施具有明确规格基础的测试。

  7. 工具支持。重新构建的模型将适合由软件开发工具使用,这些工​​具可以分析性地检查竞争条件等错误,以及检查安全属性是否跨越并发执行的错误。虽然工具本身的设计和构造超出了范围,但是这个JEP可以为注释提供指导,以实现高质量的静态和动态分析。

------------------------------------

The Java Memory Model:http://www.cs.umd.edu/users/pugh/java/memoryModel/

Java内存模型

该网页是讨论Java内存模型和Java语言规范第17章的信息的起点。Java Memory Model定义了线程如何通过内存进行交互。过去有点不清楚和不必要的限制,因此进行了修订。这是该修订的参考页面。JSR 133的官方站点 - Java(tm)内存模型和线程规范修订版 - 就在这里

此页面分为几个部分:


参考资料

对于试图理解内存模型的人来说,这些参考资料是一个很好的起点。在它们之间,它们涵盖了所涉及的大多数主要问题。

JSR 133(Java内存模型)常见问题解答:https://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html

JSR 133(Java内存模型)常见问题解答
Jeremy Manson和Brian Goetz,2004年2月

目录

------------

“双重检查锁定”声明

Double-Checked Locking被广泛引用并用作在多线程环境中实现延迟初始化的有效方法。

不幸的是,当在Java中实现时,它将无法以独立于平台的方式可靠地工作,而无需额外的同步。当用其他语言(如C ++)实现时,它取决于处理器的内存模型,编译器执行的重新排序以及编译器和同步库之间的交互。由于这些都不是用C ++这样的语言指定的,因此对它的工作情况几乎没有什么可说的。可以使用显式内存屏障使其在C ++中工作,但这些障碍在Java中不可用。

-----------------------

同步和Java内存模型

JSR-133编写器编写手册

轻松内存并发

多处理器现在已经普及,并发编程正在成为主流,但典型的多处理器(x86,Sparc,Power,ARM,Itanium)和编程语言(C,C ++,Java)不能提供大多数工作所假设的顺序一致的共享内存。关于语义和验证。相反,他们有微妙的放松 (或)内存模型,暴露出对程序员的硬件和编译器优化所产生的行为。而且,这些记忆模型通常只在含糊不清(有时有缺陷)的散文中描述,导致广泛的混淆。该页面收集了一组人员的工作,他们致力于为多处理器程序开发数学上严格且可用的语义。我们主要关注三种处理器架构(x86,Power和ARM),最近的C ++和C语言版本(C ++ 11和C11),以及使用这些模型的推理和验证。

英特尔®64和IA-32架构软件开发人员手册

Fixing the Java Memory Model, Part 1

Fixing the Java Memory Model, Part 2

Going atomic

-------------

https://hllvm-group.iteye.com/group/topic/21468 

RednaxelaFX的博客

RednaxelaFX 2010-09-11

关于VM的帖的目录 

猜你喜欢

转载自blog.csdn.net/21aspnet/article/details/88772062
133