全球旧事资料 分类
内存模型memorymodel
内存模型描述的是程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节不同平台间的处理器架构将直接影响内存模型的结构在C或C中可以利用不同操作平台下的内存模型来编写并发程序但是这带给开发人员的是更高的学习成本相比之下java利用了自身虚拟机的优势使内存模型不束缚于具体的处理器架构真正实现了跨平台针对hotspotjvmjrockit等不同的jvm内存模型也会不相同内存模型的特征aVisibility可视性多核多线程间数据的共享bOrderi
g有序性对内存进行的操作应该是有序的
java内存模型javamemorymodel
根据JavaLa
guageSpecificatio
中的说明jvm系统中存在一个主内存Mai
Memory或JavaHeapMemory,Java中所有变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存Worki
gMemory,工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。
f其中工作内存里的变量在多核处理器下将大部分储存于处理器高速缓存中高速缓存在不经过内存时也是不可见的。jmm怎么体现可视性Visibility在jmm中通过并发线程修改变量值必须将线程变量同步回主存后其他线程才能访问到jmm怎么体现有序性Orderi
g通过java提供的同步机制或volatile关键字来保证内存的访问顺序
缓存一致性(cachecohere
cy)
什么是缓存一致性它是一种管理多处理器系统的高速缓存区结构,其可以保证数据在高速缓存区到内存的传输中不会丢失或重复。来自wikipedia
f举例理解假如有一个处理器有一个更新了的变量值位于其缓存中,但还没有被写入主内存,这样别的处理器就可能会看不到这个更新的值解决缓存一致性的方法a顺序一致性模型要求某处理器对所改变的变量值立即进行传播并确保该值被所有处理器接受后才能继续执行其他指令b释放一致性模型类似jmmcachecohere
cy允许处理器将改变的变量值延迟到释放锁时才进行传播jmm缓存一致性模型“happe
sbeforeorderi
g先行发生排序”一般情况下的示例程序
在如上程序中如果线程AB在无保障情况下运行那么ij各会是什么值呢答案是不确定00011011都有可能出现这里没有使用java同步机制所以jmm有序性和可视性都无法得到保障
fhappe
sbeforeorderi
g先行发生排序如何避免这种情况排序原则已经做到a在程序顺r
好听全球资料 返回顶部