java内存模型

单例模式,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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容