JVM(入门篇08)JMM Java内存模型模型. 详解.

一、什么是JMM?

1.定义:

JMM(Java Memory Model)Java内存模型.

2. JMM 和 JVM 的区别

  • JVM内存模型指的是 – 内存分区图
  • JMMJava内存模型 指的是 一种**==虚拟机规范==.**

二、JMM有何用?

1. (抽象)定义了主内存和线程之间的关系:

之前在多线程安全问题的产生 的时候也涉及到了点击跳转

1.共享变量在主内存中 (Main Memory)

2.每个线程在本地内存(Local Memory)

3.本地内存和主内存是抽象的概念,物理上不存在,只是更多的读写和计算都运行在 本地内存中,所以本地内存待遇更好(优先使用高速度的寄存器和高速缓存)

JVM(入门篇08)JMM Java内存模型模型. 详解.

2. 线程 A 和 线程 B如何通信?

必须通过主内存,线程安全问题就是通信失败的例子.
Java 高级,多线程,线程安全产生的原因;多线程问题的代码模拟

3. 工作内存和主内存交互的8大操作

名称 作用内存 作用
1.Lock(锁定) 主内存 把一个锁住(变量标识为一条线程独占状态。)
2.Unlock(解锁): 主内存 把变量解锁(可继续被其他线程锁定了
3.Read(读取) 主内存 读取变量的值到工作内存,以便后的load操作
4.Load:(载入) 工作内存 read的值放到工作内存的变量副本中。
5.use(使用) 工作内存 把工作内存变量副本中的值传递给执行引擎进行使用**(比如计算)**,
6.assign(赋值) 工作内存 执行引擎计算后的值赋
给工作内存的变量副本中
7.store(储存) 工作内存 工作内存的变量副本的值传递给主内存,和载入相反
8.write(写入) 主内存 将store的值写入到主内存变量中

4. 八大操作必须满足以下规则

规则 解释
1.顺序执行 如果把一个变量从主内存复制到工作内存,就需要胆汁顺序地执行store和write操作,但是没有必须保证是连续执行
2.配对出现 不允许 read 和load,store 和 write 单一出现 lock 和 unlock 单一出现
3.没assign不准回主内存 如果一个变量没有经历重工作内存中取出的到执行引擎运算,就不让回去
4.变量从主内存中出生 一个变量只能在主内存中产生
5. 如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要重新执行load或assign操作初始化变量的值
6. 如果一个变量事先没有被lock操作锁定,则不允许对它执行unlock操作;也不允许去unlock一个被其他线程锁定的变量
7. 对一个变量执行unlock操作之前,必须先把此变量同步到主内存中(执行store和write操作)。

二、解决线程交互的安全问题.

1.synchronized关键字

2. volatile

更多
Java 高级,多线程,线程安全产生的原因;多线程问题的代码模拟