参考资料:
维基百科-JMM
深入理解 Java 内存模型-程晓明
维基百科:
JMM(Java内存模型):Java Memory Model,描述了 Java 编程语言中的线程如何通过内存进行交互。JMM 提供了 Java 编程语言的语义,同时描述了代码的单线程执行。
最初的 JMM 于1995年开发,是不完善的、无法进行许多运行时优化的、无法充分保障代码安全。新版 JMM 由 JCP(Java Community Process)通过 JSR-133(Java Specification Request)生效,在 Java 5.0 实现。
注意:JMM ≠ JVM!
JVM(Java虚拟机):Java Virtual Machine,是一个能够运行 Java 程序,以及用其他语言编写的、且能被编译为 Java 字节码的虚拟机。JVM 的实现细节通过规范来描述。规范确保了 Java 程序在不同平台的通用性,所以使用 JDK 的程序员无需关心底层硬件平台的特性。
JVM 的规范包括:
- 类加载器(Class Loader)
- 虚拟机架构/JVM 架构*
- 字节码指令
- JVM 语言
- 字节码验证器
- 字节码解释器和 JIT 编译器
Java 7 的 JVM 架构
并发编程两个问题:
- 线程间如何通信(线程间交换信息)?
- 线程间如何同步(控制线程间操作发生的相对顺序)?
命令式编程线程间通信机制:
- ①共享内存:
隐式通信(读写内存公共状态)
显式同步(指定代码互斥执行) - ②消息传递:
显式通信(主动发送消息)
隐式同步(消息先收后发)
Java 并发采用共享内存模型,Java 线程隐式通信,通信过程透明,可能遇到内存可见性问题。
JMM 抽象示意图
网友评论