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

JMM内存模型(面试回答)

1.什么是JMM

JMM就是Java内存模型(java memory model)。因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。所以Java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的并发效果。

Java内存模型(JMM)是一个抽象的概念,用于定义Java程序中多线程之间共享内存的行为。JMM描述了变量(包括实例字段、静态字段和数组元素)在内存中的存储和读取方式,以及在多线程环境中如何确保可见性和有序性

JMM的主要目的是为了解决在多线程环境下内存的可见性和一致性问题。它规定了所有变量都存储在主内存中,每个线程拥有自己的工作内存,工作内存中保存了主内存中变量的副本线程对变量的所有操作(读取、写入)都在工作内存中进行最后再将结果同步回主内存

不同的线程之间也无法访问对方工作内存中的变量。线程之间变量值的传递均需要通过主内存来完成。

2. JMM的核心目标是确保多线程环境下的可见性、有序性和原子性

  1. 原子性:一个或多个操作,要么全部执行,要么全部不执行,执行的过程中不会被任何因素打断。例如,synchronized关键字能确保方法或代码块的原子性。

  2. 可见性:一个线程对共享变量的修改,能够被其他线程看到。通过volatile关键字来实现可见性。

  3. 有序性:程序的执行在实际运行时可能会被重排序,但JMM提供了一定的保证,使得某些操作在多线程环境中会按照程序的顺序执行。JMM允许某些指令重排序以提高性能,但会保证线程内的操作顺序不会被破坏,并通过happens-before关系保证跨线程的有序性。

更详细的可以参考下面文章:

JMM(Java内存模型)详解-CSDN博客

JVM——一文搞懂JMM(Java内存模型)-CSDN博客

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

相关文章:

  • Greiner 经典力学(多体系统和哈密顿力学)第十二章 学习笔记(Rotation About a Point)
  • SQL进阶技巧:如何计算复合增长率?
  • 十一:java web(3)-- Spring框架 -- Spring简介
  • ts 如何配置引入 json 文件
  • LeetCode面试经典150题C++实现,更新中
  • 基于springboot的家装平台设计与实现
  • CSS的配色
  • Parallax.js:让智能设备视差效果更智能、更自然
  • 一文熟悉新版llama.cpp使用并本地部署LLAMA
  • vue/react做多语言国际化的时候,在语言配置中不同的语言配置不同的字体,动态引入scss里面
  • Unity——鼠标点击信息和当前位置获取
  • vue 2的v-***关键字作用及使用场景
  • Matlab实现鲸鱼优化算法优化随机森林算法模型 (WOA-RF)(附源码)
  • 【Android】ubutun 创建Androidstudio桌面快捷方式
  • javascript 流程控制,数组【知识点整理】
  • 2.索引:SQL 性能分析详解
  • Flink SQL
  • 鸿蒙UI开发——实现环形文字
  • QT版发送邮件程序
  • JavaSE:初识Java(学习笔记)
  • ClickHouse创建分布式表
  • Flink转换算子
  • ThinkBook 14+ 2024 Ubuntu 触控板失效 驱动缺失问题解决
  • 【青牛科技】应用方案 | D75xx-150mA三端稳压器
  • WPF之iconfont(字体图标)使用
  • 08、Java学习-面向对象中级:
  • springboot集成onlyoffice(部署+开发)
  • LabVIEW编程基础教学(二)--数据类型
  • 「Mac畅玩鸿蒙与硬件29」UI互动应用篇6 - 多选问卷小应用
  • Flutter中文字体设置指南:打造个性化的应用体验