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

Java 内存模型概述

Java 内存区域

引言:

在并发编程中,需要解决两个问题:线程之间如何通信和线程之间如何同步

通信是指线程之间以何种机制来交换信息

在命令式编程中,通信机制主要分为两种:共享内存和消息传递

Java 的并发采用的是共享内存模型

1、哪些内容受 JMM 影响?哪些不受?

在 Java 中,所有的实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享。

而方法定义参数、局部变量和异常处理参数不会再线程之间共享,也就不受 JMM 影响。

受 JMM 影响的区域:

  • 堆内存,也就是 实例域、静态域、数组元素

2、JMM 的作用

JMM 决定一个线程对共享变量的写入何时对另一个线程可见。

JMM 抽象了线程和主内存间的关系:

主内存中存储的有用来读/写的共享变量,线程中存储的有共享变量的副本,也就是本地内存。

如果线程 A 要给线程 B 进行通信的话,要经过两个必要步骤:

  • 线程 A 把更新后的值,重新刷会主内存。
  • 线程 B 从主内存中,重新拿取最新值

JMM 通过控制主内存与每个线程的本地内存间的交互,来为 Java 程序员提供内存可见性的保证。

3、JMM 是如何做到可见性的保证

JMM 的编译器重排序规则会禁止特定类型的编译器重排序(不是所有的编译器重排序都要禁止)。对于处理器重排序,JMM 的处理器重排序规则会要求 Java 编译器在生成指令序列时,插入特定类型的内存屏障(Memory Barriers,Intel称之为 Memory Fence)指令,通过内存屏障指令来禁止特定类型的处理器重排序。

http://www.lryc.cn/news/322341.html

相关文章:

  • 远程桌面安卓版下载 安卓远程控制免费版
  • 算法打卡day18|二叉树篇07|Leetcode 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • MySQL 中的自增ID及其应用场景
  • ChatGPT高效完成简历制作[中篇4]-有爱AI实战教程(十一)
  • 5.2.5、【AI技术新纪元:Spring AI解码】VertexAI Embeddings
  • 【vue baidu-map】实现百度地图展示基地,鼠标悬浮标注点展示详细信息
  • uniapp canvas文字和元素居中
  • 深度探索:SWAT模型和生物地球化学循环模型实现流域生态系统水-碳-氮耦合过程模拟
  • C语言经典算法-5
  • python与excel第二节
  • Google云计算原理与应用(四)
  • 面试常问:为什么 Vite 速度比 Webpack 快
  • principles of network applications网络应用原理
  • QT增加线程函数步骤流程
  • Python基础----字符串(持续更新中)
  • 【论文阅读】DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer
  • NVM使用教程
  • mysql 学习
  • Jenkins 一个进程存在多个实例问题排查
  • mysql数据类型和常用函数
  • Elastic 线下 Meetup 将于 2024 年 3 月 30 号在武汉举办
  • 线性代数在卷积神经网络(CNN)中的体现
  • 服务器根据用途划分有哪几种?
  • linux 命令笔记:gpustat
  • 【阅读笔记】Adaptive GPS/INS integration for relative navigation
  • Java版直播商城免 费 搭 建:电商、小程序、三级分销及免 费 搭 建,平台规划与营销策略全掌握
  • 经典Bug永流传---每周一“虫”(四十五)
  • 蓝桥杯-礼物-二分查找
  • 设计原则、工厂、单例模式
  • 笔记:Mysql 主从搭建