JMM:Java内存模型

Java内存模型(JMM)

参考:https://javaguide.cn/java/concurrent/jmm.html、https://www.javabetter.cn/thread/jmm.html

JMM 是什么?

JMM(Java Memory Model)出现的原因有两点(如下)。所以,才需要JMM 规定内存可见性规则和禁止特定的指令重排序,保证不同线程能看到正确的共享数据状态,实现多线程之间的正确交互

  1. 因为在不同的操作系统上,内存模型不同。如果直接使用操作系统的内存模型,就违背了Java的跨平台特性。所以,Java语言才会制定JMM。
  2. JMM制定一套规范,确保在多线程环境下数据的一致性、支持高效的同步机制

这里主要讲一下为什么会有多线程安全问题:指令重排

指令重排

为了提升执行速度,计算机在执行程序代码的时候,会对指令进行重排序(即不一定按照写的代码顺序执行)。常见的 指令重排有两种:

  1. 编译器优化重排:编译器(包括 JVM、JIT 编译器等)在不改变单线程程序语义的前提下,重新安排语句的执行顺序。
  2. 指令并行重排:现代处理器采用了指令级并行技术(Instruction-Level Parallelism,ILP)来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。

指令重排序可以保证串行语义一致,但是没有义务保证多线程间的语义也一致,所以在多线程下,指令重排序可能会导致一些问题。解决办法:

  1. 对于编辑器,通过禁止编译器重排序,可禁止重排序。

  2. 对于处理器,通过插入内存屏障(Memory Barrier,或有时叫做内存栅栏,Memory Fence)的方式来禁止特定类型的处理器重排序。

    内存屏障是一种 CPU 指令,用来禁止处理器指令发生重排序(像屏障一样),从而保障指令执行的有序性。

JMM 工作原理

Java 内存模型(JMM) 抽象了线程和主内存之间的关系,就比如说线程之间的共享变量必须存储在主内存中

首先,JMM 中的内存模型中,分为主内存、工作内存:

  • 主内存:Java内存模型规定了所有的共享变量都存储在主内存中。

  • 工作内存(本地内存):每个线程都有一个私有的工作内存,线程的工作内存中保存了该线程中使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行

    在这里插入图片描述

多线程下,对主内存的共享变量进行操作会诱发线程安全问题。而 JMM 定义了一系列的操作来保证线程的同步问题,他规定了如何做数据同步以及什么时候做数据同步

JVM 内存结构 和 JMM 的区别

  • JMM 主要关注的是多线程编程中的并发控制问题,通过一系列规范来保证数据的一致性和可见性。例如,Happens-before规则用于确保某些操作的顺序性。
  • JVM内存结构 则更多地涉及具体的内存管理策略,如内存区域的划分垃圾回收机制等,这些都直接影响到程序的性能和运行效率。

JMM 与 happens-before 原则?

虽然JMM提供了一个强大的内存模型,保证多线程之间的正确交互。但是另外一方面 编译器、处理器 又希望 JMM 的束缚少一点,这样就可以尽可能的做更多优化。JMM 提供了happens-before 规则,来达到一定的平衡。

happens-before 关系的定义:如果一个操作 happens-before 另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前

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

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

相关文章

System.Data.SQLite 版本兼容问题

System.Data.SQLite 32和64位版本兼容问题 SQLite数据库小巧轻量、免费开源,在中小型项目或移动端项目经常使用,在Windows桌面端需要使用System.Data.SQLite.dll文件,版本特别多,可仔细阅读官方文档了解它们的区别。本文介绍如何…

从AI应用排行榜选择AI产品(9月)

2024年9月13日,OpenAI公司宣布推出其全新的AI模型:o1,在数学、编程和科学问题的解决处理能力上取得了显著进步。该模型通过自我对弈强化学习(Self-play RL)和思维链(Chain of Thought, CoT)技术…

C++入门基础知识76(实例)——实例 1【输出 “Hello, World!“】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C 实例 【输出 "Hello, World!&quo…

模版进阶(template)

1.非类型模版参数 模版参数分类类型形参与非类型形参。 ① 类型形参:出现在在模板参数列表中,跟在class或者typename之类的参数类型名称。 ② 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当…

如何在算家云搭建RVC-WebUI(语音转换)

一、Retrieval-based-Voice-Conversion-WebUI简介 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转…

系统分析师11:企业信息化战略与实施

1 内容概要 信息与信息化的概念信息系统战略规划政府信息化与电子政务企业信息化与电子商务企业应用集成 2 信息与信息化的概念 2.1 信息的概念及特点 2.1.1 信息的定义 香农:信息就是不确定性的减少。维纳:信息就是信息,既不是物质&…

企业导师面对面,产教融合实训基地搭建人才成长快车道

产教融合实训基地是指以特定专业群为服务对象,由高职院校和企业双方共同投入、共同利用,并由若干实验实训室和模块产线组成的综合性实训基地。这一基地不仅具备工学结合的功能,还融合了教育、产业和科技创新的要素,形成了一种特殊…

大田上的路径跟踪论文汇总

文章目录 2022Path tracking control method and performance test based on agricultural machinery pose correction(Computers and Electronics in Agriculture)An optimal goal point determination algorithm for automatic navigation of agricult…

最新Kali Linux超详细安装教程(附镜像包)

一、镜像下载: 链接:https://pan.baidu.com/s/1BfiyAMW6E1u9fhfyv8oH5Q 提取码:tft5 二、配置虚拟机 这里我们以最新的vm17.5为例。进行配置 1.创建新的虚拟机:选择自定义 2.下一步 3.选择稍后安装操作系统 4.选择Debian版本 因…

Mastering Qt 番外 —— 添加源码调试

笔者最近正在尝试深入的学习Qt框架,经常需要明确我经常使用的类底下发生了什么,因此笔者决定仔细研究一下如何进行源码级别的调试 此篇文章将会介绍如何使用Qt Creator这个IDE进行调试。最终效果如下 EasyWay 笔者采用的是这个最简单明了的方式&#xff…

springboot调用python脚本实现ocr图片文字识别功能

OCR简介: OCR(Optical Character Recognition),即光学字符识别,是一种利用计算机自动识别和解析图像中的文字信息的技术。它能够将纸质文档、图片、照片等载体上的文字信息转化为计算机可编辑和处理的文本数据。 一,准备工作 1,java环境 2,springboot项目 3,python环境 …

如何增强水凝胶湿粘附力?藤壶启发与溶剂交换策略相结合!

大家好,今天我们来聊聊一项关于水凝胶的有趣研究——《Barnacle inspired strategy combined with solvent exchange for enhancing wet adhesion of hydrogels to promote seawater-immersed wound healing》发表于《Bioactive Materials》。在湿或水下环境中&…

rem与px转换工具

rem与px都是css样式单位,通常px是我们比较熟悉的单位,所以根据设计稿转换rem的话,一般都需要根据html的设置的px字号来转换,本工具可以实现rem与px之间的转换

50个必须知道的VS代码扩展

我们即将浏览50个必须知道的VS Code扩展,这些扩展将大幅提高您的生产力,并帮助您像专业人士一样编码! 1. TabNine TabNine 是一个基于AI的自动完成工具,它可以根据您的代码上下文和模式建议完成,通过智能自动完成提高…

从源码到应用:互联网医院系统与预约问诊APP开发实战指南

对于开发者来说,如何从源码出发构建一个高效、稳定的互联网医院系统和预约问诊APP,是一个具有挑战性但又充满潜力的任务。本文将深入探讨互联网医院系统源码的核心技术和开发要点,结合预约问诊APP的实现路径,分享从源码到应用的开…

大工程师客户端下载 官方地址

https://download.3dsource.cn/3DSource_Client.exe

原装二手MS2724C安立(Anritsu)MS2724B手持式频谱分析仪

安立ANRITSU MS2724C MS2724B手持式频谱分析仪 Anritsu MS2724C 高性能手持式频谱分析仪为无线专业人士提供了在恶劣的 RF 和物理环境中进行最苛刻的测量所需的性能。使用主要仪器功能可以轻松进行测量:频率、跨度、幅度和带宽。专用的常用功能键和熟悉的计算器型键…

vs code 跳转很慢

查看结构体、接口等非常之慢。c/c语言服务功能使用了智能引擎所致,设置为模糊检索即可。 修改如下: 1.打开"文件",选"首选项","设置" 2.弹出的窗口中搜索 "C_Cpp.intelliSenseEngine" …

青柠视频云——视频丢包(卡顿、花屏、绿屏)排查

一、问题说明 近期有客户反馈,接入平台的设备经常出来卡顿、花屏、录屏的情况,出现这样的场景很是尴尬。 客户是私有化部署在公网环境,于是我们联系客户,对问题进行追踪排查。 二、场景复现 我们现场情况确认的过程中,…

纷享销客“子流程”创新——企业流程管理的革新之选

Jack是一家电子商务企业的销售经理,近期他的公司订单量激增,但随之而来的退货流程却成了一个棘手的问题。每天,成百上千的退货请求涌向客服部门,而退货流程的每一步:从接收退货申请、物流派单、商品检验入库&#xff0…