笔记 - Java 内存结构与模型

-- Java里内存结构与内存模型是两种概念

一、Java内存结构

笔记 - Java 内存结构与模型_第1张图片

  • HeapMemory - 堆内存
  • Java Stacks - 栈内存 (运行时)
  • Method Area - 方法区
  • Native Method Stack - 本地方法栈 真实和系统打交道的地方
  • Jit Compiler - 将java运行指令编译成机器指令
  • Garbage Collector - 垃圾回收器

二、Java内存模型: 描述多线程环境中线程与内存的关系

笔记 - Java 内存结构与模型_第2张图片

出现(0,0)的原因:

  1. 没有关系的两行代码可能会乱序编译 (编译器的选择)
  2. 内存的可见性
  • 线程1的寄存器、线程2寄存器与内存的读写之间存在0.2ms的微差

笔记 - Java 内存结构与模型_第3张图片

三、happens-after 规范

Java委员会规定以下操作必须保证happens-after关系

  1. Unlock发生在Lock之前
  2. 写volatile发生在读volatile之前 (volatile修饰参数 可以避免上面栗子(0,0)条件的发生)
  3. 线程start()发生在线程所有动作之前
  4. 线程中所有操作发生在线程 join() 之前 (a.join(),该线程等待a线程执行完成)
  5. 构造函数完成发生在 finalizer()方法 开始之前 
  6. 传递性: happens-after关系满足传递性 (A发生在B之前,B发生在C之前,得出结论A发生在C之前)

你可能感兴趣的:(Java基础,Java,笔记)