【JMM】Java 内存模型

🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈

文章目录

  • [1. 前言](#1. 前言)
  • [2. JMM 内存模型内容](#2. JMM 内存模型内容)
  • [3. JMM 内存模型简单执行示意图](#3. JMM 内存模型简单执行示意图)

⚠️ 不要与 JVM 内存分布混为一谈论,这是 Java 内存模型,即 Java Memory Model,简称 JMM

1. 前言

Java 内存模型是用来定义 Java 线程和内存之间的操作规范目的是解决多线程正确执行的问题

Java 内存模型规范的定义确保了多线程程序的可见性、有序性和原子性,从而保证了线程之间正确的交互和数据一致性

2. JMM 内存模型内容

Java 内存模型主要包括以下内容:

介绍主内存、工作内存,内存间交互操作,以及三个特性:

  • 主内存(Main Memory):所有线程共享的内存区域,包含了对象的字段、方法和运行时常量池等数据
  • 工作内存(Working Memory):每个线程拥有自己的工作内存,用于存储主内存中的数据副本,线程只能直接操作工作内存中的数据
  • 内存间交互操作:线程通过读取和写入操作与主内存进行交互,读操作将数据从主内存复制到工作内存,写操作将修改后的数据刷新到主内存
  • 原子性(Atomicity):JMM 保证基本数据类型(如 int、long、double)的读写操作具有原子性,即不会被其他线程干扰,保证操作的完整性
  • 可见性(Visibility):JMM 确保一个线程对共享变量的修改对其他线程可见,即一个线程在工作内存中修改数据后,必须将最新的数据刷新到主内存,以便其他线程可以读取到更新后的数据
  • 有序性(Ordering):JMM 保证程序的执行顺序按照一定的规则进行,不会出现随机的重排序现象(包括编译器重排序、处理器重排序和内存重排序等)

Java 内存模型通过以上规则和语义,提供了一种统一的内存访问方式,使得多线程程序的行为可预测、可理解,并帮助开发者编写正确和高效的多线程代码,开发者可以利用 JMM 提供的同步机制,如关键字 volatile、synchronized、Lock等,来实现线程之间的同步与通信,以确保线程安全和数据一致性。

3. JMM 内存模型简单执行示意图

JMM 内存模型的简单执行示意图:


💛💛💛特别说明

1)主内存与工作内存详细解释:可以参考往内容 【多线程】线程安全 中的 特别介绍 "工作内存"和"主内存"

2)JVM 中的内存区域划分:可参考往期内容 【JVM】一文带你了解JVM 中的JVM 中的内存区域划分

✨✨✨本期内容到此结束啦~

相关推荐
名字还没想好☜44 分钟前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王1 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
一壶浊酒..4 小时前
Scrape Webpack练习
开发语言·javascript·webpack
ZJH__GO4 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆4 小时前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光5 小时前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林5 小时前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
命运之光5 小时前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人5 小时前
C# | Serilog 新手入门
开发语言·c#·.net·log
marvelyu6 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库