当前位置: 首页 > news >正文

JMM(Java内存模型)

Java内存模型(Java Memory Model,简称JMM)是Java语言规范中定义的一个抽象概念,它描述了程序中各个变量(包括实例字段、静态字段和构成数组对象的元素)在并发环境下的访问规则和一致性保证。JMM的主要目标是为了屏蔽各种硬件和操作系统的内存访问差异,确保在不同的Java虚拟机实现以及不同平台上的运行结果是一致的。

JMM几个关键特性:

  1. 主内存与工作内存

    • 在JMM中,所有线程共享的数据都存储在主内存(Main Memory)中。
    • 每个线程都有自己的工作内存(Working Memory),也被称为本地内存或线程缓存。工作内存包含该线程读/写共享变量的副本。线程对变量的所有操作必须先在工作内存中进行,然后同步回主内存;线程间无法直接相互访问对方的工作内存数据。
  2. 内存可见性

    • JMM通过一系列的happens-before规则来确保线程间的内存可见性,即一个线程修改了共享变量后,其他线程能够看到这个修改的结果。
    • volatile关键字和synchronized同步块或方法等机制都可以提供内存可见性保证。
  3. 原子性

    • JMM保证了基本数据类型的访问具有原子性,但对于复合操作(如i++)并不保证原子性。
    • 通过synchronized同步代码块或java.util.concurrent.atomic包提供的原子类可以实现原子操作。
  4. 有序性

    • Java编译器和处理器为了优化性能可能会对指令进行重排序,这可能导致多线程环境下出现意料之外的行为。
    • JMM通过内存屏障(Memory Barrier)和as-if-serial语义保证程序最终执行结果的有序性,即使实际执行过程中存在指令重排序。
  5. 线程之间的交互

    • 线程之间通过锁定(Locking)和解锁(Unlocking)监视器来实现对主内存中的变量的互斥访问,从而解决数据竞争问题。

相关文章:

  • 数据库管理-第146期 最强Oracle监控EMCC深入使用-03(20240206)
  • HTML5和CSS3强化知识总结
  • Hadoop:认识MapReduce
  • vscode配置微信小程序编辑环境 2024/2/10更新
  • 《21天精通IPv4 to IPv6》第16天:IPv6网络的故障排除——如何排除IPv6网络故障? ️
  • unity学习案例总结
  • 23种设计模式概述
  • 【Flink入门修炼】1-1 为什么要学习 Flink?
  • OpenCV/C++:点线面相关计算(二)
  • lua:有关表访问的metamethod
  • 工业制造:分布式控制系统(DCS),一文掌握。
  • 《统计学简易速速上手小册》第9章:统计学在现代科技中的应用(2024 最新版)
  • 腾讯云4核8G服务器可以用来干嘛?怎么收费?
  • python学习23
  • 【Java八股面试系列】并发编程-并发关键字,线程池
  • 30秒的PHP代码片段(1)数组 - Array
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CSS实用技巧干货
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JavaScript DOM 10 - 滚动
  • Kibana配置logstash,报表一体化
  • 聊聊flink的TableFactory
  • 用 Swift 编写面向协议的视图
  • AI算硅基生命吗,为什么?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # 飞书APP集成平台-数字化落地
  • # 数论-逆元
  • #android不同版本废弃api,新api。
  • #pragma预处理命令
  • (+4)2.2UML建模图
  • (第二周)效能测试
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (九十四)函数和二维数组
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (一)认识微服务
  • (转) Face-Resources
  • (转)iOS字体
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET MVC之AOP
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .net中调用windows performance记录性能信息
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @GlobalLock注解作用与原理解析
  • @selector(..)警告提示
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [Android]竖直滑动选择器WheelView的实现
  • [Angular] 笔记 6:ngStyle
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [CakePHP] 在Controller中使用Helper