1 basic concepts:
: Code, to complete a certain task, code sequences (static concept)
Process: program on some data of the first run (the concept of dynamic)
Thread: A process may contain one or more threads (independent unit occupies resources)
2 JVM thread
JVM when to start?
Class is called JVM thread --- "other thread ( main )
Thread JVM in
3 JVM memory area
Method Area: class information, a constant, static , the JIT (information sharing)
Java heap: instance object GC (Information Sharing) (OOM)
Stack VM : the Java memory model in the running (OOM)
PC: java thread private data, this data is the address of the next instruction execution
Native method stack: native and the JVM
4 Java memory model Java memory model JMM ( specification , abstract models )
1) Main Memory: Shared Information
2) 工作内存:私有信息,基本数据类型,直接分配到工作内存,引用的地址存放在工作内存,引用的对象存放在堆中
3) 工作方式:
A 线程修改私有数据,直接在工作空间修改
B 线程修改共享数据,把数据复制到工作空间中去,在工作空间中修改,修改完成以后,刷新内存中的数据
5硬件内存架构与java内存模型
1) 硬件架构
a) CPU缓存的一致性问题:并发处理的不同步
b) 解决方案:
i. 总线加锁() 降低CPU的吞吐量
ii. 缓存上的一致性协议(MESI)
当CPU在CACHE中操作数据时,如果该数据是共享变量,数据在CACHE读到寄存器中,进行新修改,并更新内存数据
CaCHE LINE置无效,其他的CPU就从内存中读数据
2) Java线程与硬件处理器
3) Java内存模型与硬件内存架构的关系
4) Java内存模型的必要性
Java内存模型的作用:规范内存数据和工作空间数据的交互
6、 并发编程的三个重要特性
原子性:不可分割 x=1
可见性:线程只能操作自己工作空间中的数据
有序性:程序中的顺序不一定就是执行的顺序
编译重排序
指令重排序
提高效率
/**
* as-if-seria:单线程中重排后不影响执行的结果,多线程。
* happens-before
7、 JMM对三个特征的保证
1) JMM与原子性
A) X=10 写 原子性 如果是私有数据具有原子性,如果是共享数据没原子性(读写)
B) Y=x 没有原子性
a) 把数据X读到工作空间(原子性)
b) 把X的值写到Y(原子性)
C) I++ 没有原子性
a) 读i到工作空间
b) +1;
c) 刷新结果到内存
D) Z=z+1 没有原子性
a) 读z到工作空间
b) +1;
c) 刷新结果到内存
多个原子性的操作合并到一起没有原子性
保证方式:
Synchronized
JUC Lock的lock
2) JMM与可见性
Volatile:在JMM模型上实现MESI协议
Synchronized:加锁
JUC JUC Lock的lock
3) JMM与有序性
Volatile:
Synchronized:
Happens-before原则:
1) 程序次序原则
2) 锁定原则 :后一次加锁必须等前一次解锁
3) Volatile原则:霸道原则
4) 传递原则:A---B ---C A--C
总结:
JVM内存区域和JMM的关系
JMM和硬件的关系
JMM和并发编程三个重要特征(有序性 as-if-seria happens-before )