Java内存模型基础简介

1.Java线程之间的通信对程序员完全透明,内存可见性(就是指内存变动)很容易困扰Java程序员。Java内存模型基础主要介绍的是概念,如顺序一致性(主要是重排序与顺序一致性)

2.什么是并发编程?

很简单就是很多线程同时访问同一个变量。

3.线程之间的通信机制有两种:共享内存与消息传递(通过信号量通知进行传递)

4.在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程没有公共状态,县城之间必须通过发送消息来显示进行通信。

5.同步是指程序中用于控制不同线程间操作发生相对顺序的机制。、

6。进程之间通过磁盘进行“共享”。

7.java的并发采用的是共享内存模型。

8.在java中所有实例域,静态域和数组元素都存储在堆内存中,堆内存在线程之间共享。

9.java线程之间的通信由java内存模型(JMM)控制,JMM定义了主内存和线程之间的抽象关系:线程之间的共享变量存储在主内存中,每个线程都有一个本地内存(抽象概念),本地内存中存储了该线程以读/写共享变量的副本。本地内存并不真是存在。

如图:Java内存模型基础简介_第1张图片

 10.现代处理器使用写缓冲区临时保存向内存写入的数据。写缓冲去可以保证指令流水线持续运行,它可以避免由于处理器停顿下来等待向内存写入数据而产生的延迟。同时,通过已批处理的方式刷新写缓冲区。(为什么以批处理:如果是单个写入,n那么就会停顿,每次写入都会有I/O操作,读区需要等待,而以批处理的方式,可以一次性写入,节省了时间,不需要过多的I/O操作),虽然写缓存区有这么多的好处,但每个处理器上的写缓冲去,仅仅对他所在的处理器可见。这样,处理器对内存的读/写操作的执行顺序,不一定与内存实际发生的读/写操作顺序一致!如处理器A 为a =1, x =b 处理器B为 b=2 y=a;主内存 a = 0,b =0,最后很有可能出现x=y=0的结果

你可能感兴趣的:(Java内存模型基础简介)