- java内存区域与java内存模型的区别
(1)Java内存区域
方法区:类、常量、static变量
堆:JVM启动的时候,存放Java实例对象
VM stack :Java的方法内存模型
程序计数器:线程的私有数据,用来记载下一条指令的地址
本地方法栈:Native
- Java内存模型
Java Memeory model(JMM)抽象的概念,规则
a从主存中复制数据到工作空间
b线程操作工作空间中的数据
C刷新主存中的数据
- 硬件内存架构与Java内存模型
- 硬件内存模型
- Java线程与硬件处理器
- Java线程与硬件内存的架构关系
- Java内存模型存在的必要性
解决Java线程的不安全性
并发:
- java内存模型对并发特征的保证
- Java并发编程的三个重要特性
原子性:不可分割的
有序性:次序,Java代码中的次序 CPU中执行顺序
可见性:线程内部私有数据对其他的线程是不可见的
(2)JMM对三大特性的保证
A JMM与原子性
- x=10;原子性 写
- Y=x;不具有原子性
- 线程X读到工作空间
- X的值写入到Y的空间
- 在主存中刷新Y的值
- i++ 不具有原子性
- 线程i读到工作空间
- i的值+1
- 在主存中刷新i的值
- Z=Z+1
同
多个原子性的操作组合到一起没有原子性
简单的赋值是具有原子性的
JMM值保证了基本读取和赋值操作具有原子性
Synchronized
Lock lock(锁)
B JMM与有序性
volatile
Synchronized
Lock(显式)
Happens-before
- 程序次序
- 锁规则:后一次枷锁加锁必须在前一次解锁
- volatile规则:用volatile修饰的变量次序不能变化
- 传递规则:A B C
- 中断规则:interrupt()
- 线程终结:线程死亡之前,逻辑单元应该执行完成
- 对象终结:finalize()
C JMM与可见性:
Volatile:
Synchronized Lock lock(锁)
Cache line
Synchronized :
Volatile: