在了解什么是 Java 内存模型之前,先了解一下为什么要提出 Java 内存模型。

之前提到过并发编程有三大问题

  • CPU 缓存,在多核 CPU 的情况下,带来了可见性问题

  • 操作系统对当前执行线程的切换,带来了原子性问题

  • 译器指令重排优化,带来了有序性问题

为了解决并发编程的三大问题,提出了 JSR-133,新的 Java 内存模型,JDK 5 开始使用。


那么什么是 Java 内存模型呢?

现在说的 Java 内存模型,一般是指 JSR-133: Java Memory Model and Thread Specification Revision 规定的 Java 内存模型。


JSR-133 具体描述:

http://www.cs.umd.edu/~pugh/java/memoryModel/jsr133.pdf


JSR-133 在 JCP 官网的具体描述:

https://jcp.org/en/jsr/detail?id=133


说明

JSR:Java Specification Requests,Java 规范提案。

JCP:Java Community Process 是一个开放的国际组织,成立于1998年,主要由 Java 开发者以及被授权者组成,是使有兴趣的各方参与定义 Java 的特征和未来版本的正式过程。


简单总结

  • Java 内存模型是 JVM 的一种规范

  • 定义了共享内存在多线程程序中读写操作行为的规范

  • 屏蔽了各种硬件和操作系统的访问差异,保证了 Java 程序在各种平台下对内存的访问效果一致

  • 解决并发问题采用的方式:限制处理器优化和使用内存屏障

  • 增强了三个同步原语(synchronized、volatile、final)的内存语义

  • 定义了 happens-before 规则


更多相关文章

  1. 探寻 Redis 内存诡异增长的元凶
  2. jvm系列(6)java内存模型(重点推荐)
  3. java创建对象的过程(内存角度分析)
  4. jvm系列(1)内存结构(补充版)
  5. jvm系列(1)内存结构
  6. 一个Java对象到底占多大内存?
  7. sql.js:JS专用的内存型数据库[github项目精选0x01]
  8. 深入理解JVM—JVM内存模型
  9. Java内存模型-防止内存泄漏

随机推荐

  1. Android常见的崩溃日志关键字分析 ( Andro
  2. ok6410 android driver(3)
  3. 修改xutils框架以支持fragment
  4. 浅析:为何到现在高端Android集成解决方案
  5. Android之如何学习
  6. 深入Android 【一】 —— 序及开篇
  7. TextView 在xml文件中的解释 android
  8. android service 生命周期
  9. Android M 新的运行时权限开发者需要知道
  10. Android Studio系列教程六--Gradle多渠道