前言
本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见100个问题搞定Java虚拟机
正文
什么是 Java 内存模型?
Java 虚拟机规范中定义了 Java 内存模型(Java Memory Model,JMM)用来屏蔽各种硬件和操作系统的内存访问差异。
这样的话,Java程序在各种平台下都能达到一致的内存访问效果。
在 Java 前,主流程序语言(如C/C++等)直接使用物理硬件和操作系统的内存模型。
由于不同平台上内存模型的差异,有可能导致程序在一套平台上并发完全正常,而在另外一套平台上并发访问却经常出错,因此在某些场景就必须针对不同的平台来编写程序。
主内存与工作内存
Java 内存模型与 happens-before 规则
Java 内存模型通过定义了一系列的 happens-before 操作,让应用程序开发者能够轻易地表达不同线程的操作之间的内存可见性。
在遵守 Java 内存模型的前提下,即时编译器以及底层体系架构能够调整内存访问操作,以达到性能优化的效果。
如果开发者没有正确地利用 happens-before 规则,那么将可能导致数据竞争。
关于 happens before 的更多内容请参考我的另一篇博客——什么是happens-before原则?