java内存模型

本文深入探讨Java内存模型(JMM)的基本概念,包括单例模式中的DCL(double check locking)机制,以及硬件层面上的并发优化原理。解析了在创建对象时的指令重排序问题,并详细介绍了MESI缓存一致性协议,以及如何通过volatile关键字解决线程间的数据可见性和指令重排序问题。
摘要由CSDN通过智能技术生成

单例模式,DCL double check loading
new 一个对象时,存在两个过程,一个是赋默认值,一个是赋初始值。

class T {
  m = 8;
}

T t = new T();
三个指令,开辟 t 的内存空间,给t的成员变量赋默认值,给成员变量赋初值,
loading -> linking [verification , preparation, resolution] initializing
然后在赋值引用,可能存在指令重排序
JMM java mermory model, java 内存模型

硬件层的并发优化基础知识

存储层的知识结构

image.png

内存一致性协议, 为了不同CPU访问修改同一个数据造成的数据不一致的问题

image.png
【并发编程】MESI--CPU缓存一致性协议
image.png

读取缓存以cache line为基本单位,目前64bytes
位于同一缓存行的两个不同数据,被两个不同CPU锁定,产生互相影响的伪共享问题
使用 缓存行的对齐,需要考虑需要浪费空间的问题

cpu 读取指令,一次可以读取多条指令执行。
cpu 会在一条指令(读内存数据)执行中,执行其他的指令,其他的指令与当前指令没有练习

合并写
WriteCombing buffer 四个字节,写满之后,存储到L2

指令重排序
volatile 避免指令重拍,线程可见性

image.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值