多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

【Java核心高阶进阶】21-JMM内存模型

【Java核心高阶进阶】21-JMM内存模型 21 | JMM 内存模型:主内存、工作内存与 8 大原子操作模块五:Java内存模型与并发基础 · 第 1 篇理解 JMM 是写好并发程序的前提,它定义了线程之间如何通过内存进行交互。一、为什么需要 Java 内存模型在单线程时代,程序的行为基本符合直觉:你写一个变量,下一行读出来一定是刚才写入的值。但进入多线程后,这一切被打破了——一个线程对变量的写入,另一个线程可能"看不见",甚至看到的是"半初始化"的值。这些诡异现象的根源,不在于你代码写错了,而在于底层硬件和编译器都在对你"撒谎"。现代 CPU 为了弥补内存访问速度与指令执行速度之间的鸿沟,引入了多级缓存(L1/L2/L3)。编译器为了优化性能,会自由重排序指令。这两者叠加的结果是:程序的执行顺序与源码顺序不一致,且每个 CPU 核心看到的其他核心的写入存在延迟。如果 Java 直接暴露这些底层行为,跨平台的一致性就无从谈起。Java 内存模型(Java Memory Model,简称 JMM)正是为了屏蔽这种差异而存在。它在 JSR-133 中被重新定义,随 JDK 5.0 正式发布,并在 JDK 8 中沿用至今。JMM 的核心目标是:在不可预测的硬件行为之上,定义一组可预测的可见性与有序性规则,让并发程序在所有平台上表现一致。需要强调一个关键认知:JMM 是一种抽象规范,并非真实存在的物理结构。它不对应任何具体的 CPU 缓存或内存条,而是一套存在于 JVM 规范
返回列表