Java内存模型 JMM

news2024/12/23 22:20:44

并发编程模型的两个关键问题

线程之间如何通信及线程之间如何同步

线程之间如何通信:共享内存,消息传递线程之间如何同步
通信是指线程之间以何种机制来 交换信息同步是指程序中用于控制不同线程间 操作发生相对顺序 的机制
在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在共享内存并发模型里,同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行
在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。在消息传递的并发模型里,由于消息的发送必须在消息的接收之前,因此同步是隐式进行的。

 Java内存模型的抽象结构 JMM
Java线程之间的通信由 Java内存模型(本文简称为 JMM )控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。

JMM定义了线程和主内存之间的抽象关系扩展
线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。

在这里插入图片描述

JMM影响范围JMM影响不到范围
在Java中,所有实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享。局部变量(Local Variables),方法定义参数(Java语言规范称之为Formal Method Parameters)和异常处理器参数(Exception Handler Parameters)不会在线程之间共享,它们不会有内存可见性问题,也不受内存模型的影响。

JMM的设计

程序员角度编译器和处理器角度
程序员对内存模型的使用。程序员希望内存模型易于理解、易于编程。程序员希望基于一个强内存模型来编写代码。编译器和处理器对内存模型的实现。编译器和处理器希望内存模型对它们的束缚越少越好,这样它们就可以做尽可能多的优化来提高性能。编译器和处理器希望实现一个弱内存模型。
JMM向程序员提供的happens-before规则能满足程序员的需求。JMM的happens-before规则不但简单易懂,而且也向程序员提供了足够强的内存可见性保证JMM对编译器和处理器的束缚已经尽可能少。从上面的分析可以看出,JMM其实是在遵循一个基本原则:只要不改变程序的执行结果(指的是单线程程序和正确同步的多线程程序),编译器和处理器怎么优化都行。
JMM对这两种不同性质的重排序,采取了不同的策略
对于会改变程序执行结果的重排序,JMM要求编译器和处理器必须禁止这种重排序。对于不会改变程序执行结果的重排序,JMM对编译器和处理器不做要求(JMM允许这种重排序)。

-----------------------------------------------------------------------------摘自 书名:Java并发编程的艺术 作者:方腾飞;魏鹏;程晓明


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

案例21:Java农产品供求信息系统设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

腾讯、头条 | 算法岗详细面经

作者 | 常青czq 整理 | NewBeeNLP 面试锦囊之面经分享系列,持续更新中 赶紧后台回复"面试"加入讨论组交流吧 写在前面 本硕华南某985,有过两段实习经历,一段是大厂的算法实习,另一段是招行Fintech实习,虽然…

如何在Linux桌面上创建快捷方式?

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 一般而言,Linux环境下在命令行上通过软件包管理工具安装软件,或者从网站直接下载已经编译好的二进制软件包,软件安装好之后不会在桌面上创建快捷方式。接下来如果想要在桌…

iOS推送播放语音播报更新

接上篇如何让iOS推送播放语音,之前的结论是iOS如果需要送审商店只能播放本地的mp3文件,这里更新一下: 更新 语音的播放,最终调用的方法是UNNotificationSound(named: xxx),而这个方法官方文档注释如下: // …

chatgpt赋能python:Python写Kafka:介绍及优势

Python写Kafka:介绍及优势 Kafka是目前互联网企业使用最广泛的消息队列系统之一,广泛应用于应用程序之间的异步通信、数据采集、日志收集等领域。Python作为一门通用且易学易用的编程语言,在和Kafka结合时也展现出了其独特的优势。本文将介绍…

我C,最好用的AI工具居然是它!

这几天写了两篇自己的AI实践: 《程序员,如何借力ChatGPT?》; 《普通人,如何借力ChatGPT?》; 很多朋友在后台留言,问我用的是哪一款AI工具。 先说结论。 我最终在ChatGPT,…

超大规模数据库集群保稳系列之二:数据库攻防演练建设实践

总第562篇 2023年 第014篇 本文整理自美团技术沙龙第75期的主题分享《美团数据库攻防演练建设实践》,系超大规模数据库集群保稳系列(内含4个议题的PPT及视频)的第2篇文章。 本文首先介绍了美团当前数据库运维现状、遇到的问题,以及…

Flutter 笔记 | Flutter 可滚动组件

Sliver布局模型 我们介绍过 Flutter 有两种布局模型: 基于 RenderBox 的盒模型布局。基于 Sliver ( RenderSliver ) 按需加载列表布局。 之前我们主要了解了盒模型布局组件,下面学习基于Sliver的布局组件。 通常可滚动组件的子组件可能会非常多、占用…

Protein Cell | 中国农科院基因组所刘永鑫组综述微生物组研究的过去、现在和未来(大众评审截止26号20点)...

微生物组研究展望:过去、现在和未来 Microbiome research outlook: past, present, and future 2023-5-23,Protein & Cell,[IF 15.328] DOI:10.1093/procel/pwad031 原文链接:https://academic.oup.com/proteincel…

adb 命令速查(下)

ADB 关于APP安装、调试和monkey压力测试 作者:炭烤毛蛋 ,查看博主了解更多。 提示:承接上篇《adb 命令速查(中)》,本文将 文章目录 ADB 关于APP安装、调试和monkey压力测试7 adb 关于 apk 的相关操作7.1 安装 apk普通安装带有命…

QQGC?揭秘QQ的AI绘画大模型技术

👉腾小云导读 2022年来,AIGC概念迅速出圈并快速形成产业生态,成为继PGC、UGC之后新的数字内容创作形式。QQ影像中心提出了自研的AI画画技术方案——QQGC,本文将介绍在QQGC基础大模型训练中的实践和探索,接着往下看吧~ …

我用AI帮我唱了首“基尼太美”,颠覆了我的认知!太牛逼了

目录 前言 AI唱"基尼太美"是什么感觉 使用so-vits-svc打造自己专属歌手 1.声音素材整理 2.训练模型 3.让AI唱歌​编辑 AI歌手背后的技术 AI歌手会成为主流吗 写到最后 大家好,我是大侠,AI领域的专业博主 前言 在5月份,孙…

第五篇:强化学习基础之马尔科夫决策过程

你好,我是zhenguo(郭震) 今天总结强化学习第五篇:马尔科夫决策过程 基础 马尔科夫决策过程(MDP)是强化学习的基础之一。下面统一称为:MDP MDP提供了描述序贯决策问题的数学框架。 它将决策问题建模为: 状态…

司空见惯 - 使用dBm表示功率的各种现实情况

前面一篇文章介绍过,使用dBm表示功率时,如何转换为mW。 那现实世界的实际情况中,使用dBm来表示电磁波的能量强度,列表如下: Power level Power Notes 526 dBm 3.61049 W 黑洞碰撞后的引力波辐射的功率&#xff0c…

解决缓存与数据库数据不一致的问题,这篇文章告诉你如何做!

缓存是提高应用程序性能和响应速度的关键组件之一。缓存可以帮助减少数据库查询次数,从而减轻服务器负担并加快页面加载速度。然而,缓存与数据库一致性是分布式系统中常见的问题,因为缓存和数据库之间可能存在数据不一致的情况。为了解决这个…

CyberLink的摄像头应用程序YouCam 10.1版本在win10系统的下载与安装配置教程

目录 前言一、YouCam安装二、使用配置总结 前言 YouCam是由CyberLink公司开发的一款实用的摄像头应用程序,它集成了多种实时视频特效、背景虚化、美颜、屏幕录制等功能。 通过使用该软件内置的相机特效,用户可以将视频聊天或自拍照片变得更加精彩和有趣…

oracle表空间、用户、表的关系和创建

目录 一、表空间 二、用户 (1)Oracle和mysql、sqlserver的区别 (2)创建用户 (3)给用户授权 三、表 (1)创建表 (2)用图像化软件添加表约束 1.主键约束…

TikTok正测试名为“Tako”的AI聊天机器人;武汉大学宣布推出CheeseChat

🚀 近日安徽安庆一起利用AI换脸技术的电信诈骗案件 近日安徽安庆一起利用AI换脸技术的电信诈骗案件,3名涉案人员被抓获并返还被骗款132万元。 此前也有多起利用AI换脸技术进行的电信诈骗案件,甚至还出现在明星直播带货中。 专家提示&#…

ChatGPT无限可能性:自然语言生成的奥秘

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! ChatGPT无限可能性:自然语言生成的奥秘 数字化时代:跨越语言和文化障碍 冰岛是北大西洋中部的一个岛国,拥有充满活力的科技产业和…

网络编程初识

如果这篇有没接触过的知识点,请转到网络编程先导知识_小梁今天敲代码了吗的博客-CSDN博客 目录 IPv4和IPv6的概念: 子网掩码 默认网关 ping命令 端口 OSI网络分层模型 TCP/IP四层模型 字节序转换函数 IP地址转换 上一篇介绍了网络编程的先导知…