在前面谈到了一些关于内存模型以及并发编程中可能会出现的一些问题下面我们来看一下 Java 内存模型,
研究一下 Java 内存模型为我们提供了哪些保证以及在 java 中提供了哪些方法和机制来让我们在进行多线程编程时能够保证程序执行的正确性
在 Java 虚拟机规范中试图定义一种 Java 内存模型 (Java Memory Model,JMM) 来屏蔽各个硬件平台和操作系统的内存访问差异,
以实现让 Java 程序在各种平台下都能达到一致的内存访问效果那么 Java 内存模型规定了哪些东西呢, 它定义了程序中变量的访问规则,
往大一点说是定义了程序执行的次序注意, 为了获得较好的执行性能,
Java 内存模型并没有限制执行引擎使用处理器的寄存器或者高速缓存来提升指令执行速度,
也没有限制编译器对指令进行重排序也就是说, 在 java 内存模型中, 也会存在缓存一致性问题和指令重排序的问题
Java 内存模型规定所有的变量都是存在主存当中(类似于前面说的物理内存), 每个线程都有自己的工作内存(类似于前面的高速缓存)
线程对变量的所有操作都必须在工作内存中进行, 而不能直接对主存进行操作并且每个线程不能访问其他线程的工作内存
举个简单的例子: 在 java 中, 执行下面这个语句:
i = 10;
执行线程必须先在自己的工作线程中对变量 i 所在的缓存行进行赋值操作, 然后再写入主存当中而不是直接将数值 10 写入主存当中
2.3.1 java 内存模型
来源: http://www.bubuko.com/infodetail-2490456.html