在了解什么是 Java 內存模型之前,先了解一下為什么要提出 Java 內存模型。
之前提到過並發編程有三大問題
- CPU 緩存,在多核 CPU 的情況下,帶來了可見性問題
- 操作系統對當前執行線程的切換,帶來了原子性問題
- 譯器指令重排優化,帶來了有序性問題
為了解決並發編程的三大問題,提出了 JSR-133,新的 Java 內存模型,JDK 5 開始使用。
那么什么是 Java 內存模型呢?
現在說的 Java 內存模型,一般是指 JSR-133: Java Memory Model and Thread Specification Revision 規定的 Java 內存模型。
JSR-133 具體描述:jsr133.pdf
說明下
JSR:Java Specification Requests,Java 規范提案。
JCP:Java Community Process 是一個開放的國際組織,成立於1998年,主要由 Java 開發者以及被授權者組成,是使有興趣的各方參與定義 Java 的特征和未來版本的正式過程。
簡單總結下
- Java 內存模型是 JVM 的一種規范
- 定義了共享內存在多線程程序中讀寫操作行為的規范
- 屏蔽了各種硬件和操作系統的訪問差異,保證了 Java 程序在各種平台下對內存的訪問效果一致
- 解決並發問題采用的方式:限制處理器優化和使用內存屏障
- 增強了三個同步原語(synchronized、volatile、final)的內存語義
- 定義了 happens-before 規則
參考:
1、https://baike.baidu.com/item/JSR
2、https://baike.baidu.com/item/JCP
3、https://zh.wikipedia.org/zh-hans/JCP