-- Java里内存结构与内存模型是两种概念
一、Java内存结构:
- HeapMemory - 堆内存
- Java Stacks - 栈内存 (运行时)
- Method Area - 方法区
- Native Method Stack - 本地方法栈 真实和系统打交道的地方
- Jit Compiler - 将java运行指令编译成机器指令
- Garbage Collector - 垃圾回收器
二、Java内存模型: 描述多线程环境中线程与内存的关系
出现(0,0)的原因:
- 没有关系的两行代码可能会乱序编译 (编译器的选择)
- 内存的可见性
- 线程1的寄存器、线程2寄存器与内存的读写之间存在0.2ms的微差
三、happens-after 规范
Java委员会规定以下操作必须保证happens-after关系
- Unlock发生在Lock之前
- 写volatile发生在读volatile之前 (volatile修饰参数 可以避免上面栗子(0,0)条件的发生)
- 线程start()发生在线程所有动作之前
- 线程中所有操作发生在线程 join() 之前 (a.join(),该线程等待a线程执行完成)
- 构造函数完成发生在 finalizer()方法 开始之前
- 传递性: happens-after关系满足传递性 (A发生在B之前,B发生在C之前,得出结论A发生在C之前)