返回顶部
首页 > 资讯 > 精选 >Java内存模型JMM详解
  • 536
分享到

Java内存模型JMM详解

java内存模型详解 2023-05-30 19:05:59 536人浏览 薄情痞子
摘要

Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无关具体平台的统一的保证。(可能在术语上与Java运行时内存分布有歧义,后者指堆、方法区、线程栈等内存

Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无关具体平台的统一的保证。(可能在术语上与Java运行时内存分布有歧义,后者指堆、方法区、线程栈等内存区域)。
并发编程有多种风格,除了CSP(通信顺序进程)、Actor等模型外,大家最熟悉的应该是基于线程和的共享内存模型了。在多线程编程中,需要注意三类并发问题:

·原子性
·可见性
·重排序

原子性涉及到,一个线程执行一个复合操作的时候,其他线程是否能够看到中间的状态、或进行干扰。典型的就是i++的问题了,两个线程同时对共享的堆内存执行++操作,而++操作在JVM、运行时、CPU中的实现都可能是一个复合操作, 例如在JVM指令的角度来看是将i的值从堆内存读到操作数栈、加上一、再写回到堆内存的i,这几个操作的期间,如果没有正确的同步,其他线程也可以同时执行,可能导致数据丢失等问题。常见的原子性问题又叫竞太条件,是基于一个可能失效的结果进行判断,如读取-修改-写入。 可见性和重排序问题都源于系统的优化

由于CPU的执行速度和内存的存取速度严重不匹配,为了优化性能,基于时间局部性、空间局部性等局部性原理,CPU在和内存间增加了多层高速缓存,当需要取数据时,CPU会先到高速缓存中查找对应的缓存是否存在,存在则直接返回,如果不存在则到内存中取出并保存在高速缓存中。现在多核处理器越基本已经成为标配,这时每个处理器都有自己的缓存,这就涉及到了缓存一致性的问题,CPU有不同强弱的一致性模型,最强的一致性安全性最高,也符合我们的顺序思考的模式,但是在性能上因为需要不同CPU之间的协调通信就会有很多开销。

典型的CPU缓存结构示意图如下

Java内存模型JMM详解

CPU的指令周期通常为取指令、解析指令读取数据、执行指令、数据写回寄存器或内存。串行执行指令时其中的读取存储数据部分占用时间较长,所以CPU普遍采取指令流水线的方式同时执行多个指令, 提高整体吞吐率,就像工厂流水线一样。

Java内存模型JMM详解

读取数据和写回数据到内存相比执行指令的速度不在一个数量级上,所以CPU使用寄存器、高速缓存作为缓存和缓冲,在从内存中读取数据时,会读取一个缓存行(cache line)的数据(类似磁盘读取读取一个block)。数据写回的模块在旧数据没有在缓存中的情况下会将存储请求放入一个store buffer中继续执行指令周期的下一个阶段,如果存在于缓存中则会更新缓存,缓存中的数据会根据一定策略flush到内存。

public class MemoryModel {  private int count;  private boolean stop;  public void initCountAndStop() {    count = 1;    stop = false;  }  public void doLoop() {    while(!stop) {      count++;    }  }  public void printResult() {    System.out.println(count);    System.out.println(stop);  }}

--结束END--

本文标题: Java内存模型JMM详解

本文链接: https://lsjlt.com/news/220947.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java内存模型JMM详解
    Java Memory Model简称JMM, 是一系列的Java虚拟机平台对开发者提供的多线程环境下的内存可见性、是否可以重排序等问题的无关具体平台的统一的保证。(可能在术语上与Java运行时内存分布有歧义,后者指堆、方法区、线程栈等内存...
    99+
    2023-05-30
    java 内存模型 详解
  • JAVA内存模型(JMM)详解
    目录前言JAVA并发三大特性可见性有序性原子性Java内存模型真面目Happens-Before规则1.程序的顺序性规则2. volatile 变量规则3.传递性锁的规则5.线程 s...
    99+
    2022-12-08
    JAVA 内存模型 java内存模型和jvm内存模型的区别 java jmm模型
  • Java内存模型JMM与volatile
    目录1.Java内存模型2.并发三大特性2.1.原子性2.2.可见性2.3.有序性3.两个规则3.1.happens-before规则3.2.as-if-serial4.volati...
    99+
    2024-04-02
  • Java内存模型JMM的介绍
    这篇文章主要讲解了“Java内存模型JMM的介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java内存模型JMM的介绍”吧!一、为什么要有内存模型在现代多核处理器中,每个处理器都有自己的...
    99+
    2023-06-15
  • 怎么深入理解Java内存模型JMM
    这期内容当中小编将会给大家带来有关怎么深入理解Java内存模型JMM,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java 内存模型Java 内存模型(JMM)是一种抽象的概念,并不真实存在,它描述了一组...
    99+
    2023-06-05
  • JMM内存模型是什么
    这篇文章主要介绍“JMM内存模型是什么”,在日常操作中,相信很多人在JMM内存模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JMM内存模型是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!JM...
    99+
    2023-06-27
  • Java——内存模型详解!
    Java内存模型是一种抽象的规则或规范,定义了程序中存在竞争现象的对象(包括实例字段、静态字段和数组对象,不包括局部变量,形式参数;后者是线程私有,不存在竞争问题)的访问方式。         如果我们要想深入了解Java并发编程,就要先理...
    99+
    2023-10-20
    java 开发语言
  • Java内存模型详解
    目录什么是JMM主存与工作内存volatile 关键字有什么用一个线程对共享变量做了修改之后,其他的线程能够看到(感知到)该变量的这种修改(变化)什么是JMM JMM全称Java M...
    99+
    2023-05-18
    Java内存模型 Java JMM模型
  • 详解Java的内存模型
    目录JVM的内存模型Java “一次运行,到处编译” 的真面目JVM的本质和位置JVM的内存模型总览线程私有区域线程共享区域直接内存从例子来理解内存模型JVM的内存模型 Java “...
    99+
    2024-04-02
  • Java内存区域与内存模型详解
    这篇文章主要介绍“Java内存区域与内存模型详解”,在日常操作中,相信很多人在Java内存区域与内存模型详解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java内存区域与内存模型详解”的疑惑有所帮助!接下来...
    99+
    2023-06-02
  • Java内存模型图文详解
    1. 概述多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,...
    99+
    2014-08-03
    Java
  • Java并发编程之volatile与JMM多线程内存模型
    目录一、通过程序看现象二、为什么会产生这种现象(JMM模型)?三、MESI 缓存一致性协议 一、通过程序看现象 在开始为大家讲解Java 多线程缓存模型之前,我们先看下面的这一段代码...
    99+
    2024-04-02
  • JVM 运行时数据区与JMM 内存模型
    目录1. JVM 运行时数据区2. JMM 内存模型硬件内存模型JMM3. 可见行与 volatile 关键字1. JVM 运行时数据区 JVM运行时数据区可以分为元空间,堆,虚拟机...
    99+
    2022-11-13
    JVM 运行时数据区 JMM 内存模型
  • 详细分析Java内存模型
    目录一、为什么要学习并发编程二、为什么需要并发编程三、从物理机中得到启发四、Java 内存模型五、原子性5.1、什么是原子性5.2、如何保证原子性六、可见性6.1、什么是可见性6.2...
    99+
    2024-04-02
  • Java并发内存模型详情
    目录1、Java内存模型2、硬件内存架构3、实际执行3.1 共享对象可见性3.2 竞争条件Java是一门支持多线程执行的语言,要编写正确的并发程序,了解Java内存模型是重要前提。而...
    99+
    2024-04-02
  • 【JVM】JVM内存模型详解
    一、JVM是什么? JVM是Java Virtual Machine(Java虚拟机)的缩写,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收...
    99+
    2023-09-16
    jvm java 面试
  • Java内存模型之happens-before概念详解
    简介 happens-before是JMM的核心概念。理解happens-before是了解JMM的关键。 1、设计意图 JMM的设计需要考虑两个方面,分别是程序员角度和编译器、处理...
    99+
    2024-04-02
  • java高并发的volatile与Java内存模型详解
    public class Demo09 { public static boolean flag = true; public static class T1...
    99+
    2024-04-02
  • Java并发编程之volatile与JMM多线程内存模型实例分析
    本篇内容主要讲解“Java并发编程之volatile与JMM多线程内存模型实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java并发编程之volatile与JMM多线程内存模型实例分析”...
    99+
    2023-06-30
  • Java内存模型中的happen-before关系详解
    目录前言概述为什么需要 JMM,它试图解决什么问题?JMM 是怎么解决可见性等问题的呢?后记前言 Java 语言在设计之初就引入了线程的概念,以充分利用现代处理器的计算能力,这既带来...
    99+
    2022-11-13
    Java happen before Java 内存模型
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作