内存屏障与JVM并发 - 编程入门网
约定,因为第一次写操作在第二次写操作 之前发生。
st.rel屏障是单向的——就像ld.acq一样。但是在第五行编译器设置了一个双 向内存屏障。mf指令,或者称为“内存栅栏”,是Itanium 2指令集中的完整栅栏 。笔者认为是多余的。 内存屏障与JVM并发(3)时间:2011-09-04 infoq 崔康译内存屏障是特定于硬件的 本文不想针对所有内存屏障做一综述。这将是一件不朽的功绩。但是,重要的 是认识到这些指令在不同的硬件体系中迥异。下面的指令是连续写操作在多处理 Intel Xeon硬件上编译的结果。本文后面的所有汇编指令除非特殊声明否则都出 自于Intel Xeon。
我们可以看到x86 Xeon在第11、12行执行两次volatile写操作。第二次写操作 后面紧跟着mfence操作——显式的双向内存屏障。 下面的连续写操作基于SPARC。
我们看到在第五、六行存在两次volatile写操作。第二次写操作后面是一个 membar指令——显式的双向内存屏障。 x86和SPARC的指令流与Itanium的指令流存在一个重要区别。JVM在x86和SPARC 上通过内存屏障跟踪连续写操作,但是在两次写操作之间没有放置内存屏障。另 一方面,Itanium的指令流在两次写操作之间存在内存屏障。为何JVM在不同的硬 件架构之间表现不一?因为硬件架构都有自己的内存模型,每一个内存模型有一 套一致性保障。某些内存模型,如x86和SPARC等,拥有强大的一致性保障。另一 些内存模型,如Itanium、 PowerPC和Alpha,是一种弱保障。例如,x86和SPARC 不会重新排序连续写操作——也就没有必要放置内存屏障。Itanium、 PowerPC和 Alpha将重新排序连续写操作——因此JVM必须在两者之间放置内存屏障。JVM使用 内存屏障减少Java内存模型和 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |