首页 > 系统相关 >Java的内存模型

Java的内存模型

时间:2024-10-20 17:46:33浏览次数:8  
标签:Java 变量 模型 工作 线程 处理器 操作 内存

硬件效率的一致性

======================================================================

随着硬件技术的发展,处理器的处理能力越来越强大,但是与处理器交互的内存的处理能力并没有提升多少,读取运算,存储运算这些IO操作的瓶颈并没有得以消除,处理器的处理效率比内存的处理效率要高好几个数量级,在这种情况下在处理器和内存之间添加了一个高速缓存用以平衡相互关系,也就是将内存中的数据先保存到高速缓存中,处理器处理数据的时候直接从缓存中获取,处理完成后再从缓存中将数据同步回内存中。这样既不会拖累处理器,也能很好的从内存中操作数据。关系图如下:

在这里插入图片描述

引入高速缓存解决了处理器和内存的矛盾,但同时又产生了一个新的问题:缓存一致性,在多处理器的系统中,每个处理器都有自己的高速缓存,而他们又都共享同一主内存。当多个处理器的运算任务都涉及到同一块主内存区域时,将可能导致各自缓存数据的不一致。为了解决一致性问题,需要各个处理器访问缓存时都遵循一些协议。在读写时根据协议来操作。这里讲的"内存模型"可以理解为在特定操作协议下对特定的内存或高速缓存进行读写访问的过程抽象。java虚拟机也有自己的内存模型,接下来我们看下。

Java内存模型

======================================================================

java的内存模型规定所有的变量都存储在主内存中,每条线程都有自己的工作内存(类比上面的高速缓存)。线程的工作内存中保存了该线程使用的变量的主内存副本拷贝。线程对变量的所有操作(读取,赋值)都必须在工作内存中进行。而不能直接读写主内存中的变量,不同线程之间也无法直接访问对方工作内存中的变量。线程间变量的传递均需要通过主内存来完成。如下图

在这里插入图片描述

内存交互操作


主内存和工作内存之间具体的交互协议通过以下8个操作来完成。

| 操作 | 说明 |

| — | :-- |

| lock

(锁定) | 作用于主内存变量,

把一个变量标识为一条线程独占的状态 |

| unlock

(解锁) | 作用于主内存变量,

把一个处于锁定状态的变量释放出来,

释放后的变量才可以被其他线程锁定 |

| read

(读取) | 作用于主内存变量,

把一个变量的值从主内存传输到线程的工作内存中,以便随后的load动作使用 |

| load

(载入) | 作用于工作内存中的变量,

把read操作从主内存中得到的变量值放入工作内存的变量副本中 |

| use

(使用) | 作用于工作内存变量,

把工作内存中的一个变量的值传递给执行引擎,

每当虚拟机遇到一个需要使用到变量的值的字节码指令的时候将会执行这个操作。 |

| assign

(赋值) | 作用于工作内存变量,

把一个从执行引擎接收到的值赋给工作内存的变量,

每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作 |

| store

(存储) | 作用于工作内存变量,

把工作内存中的一个变量的值传送到主内存中,以便随后的write操作使用 |

| writer

(写入) | 作用于主内存变量,

把store操作从工作内存中得到的变量值放入主内存的变量中。 |

将一个变量从主内存中复制到工作内存中,需要顺序的执行read和load操作。

在这里插入图片描述

如果要将变量从工作内存中同步会主内存,就要顺序的执行store和write操作如下。

在这里插入图片描述

标签:Java,变量,模型,工作,线程,处理器,操作,内存
From: https://blog.csdn.net/2401_87555310/article/details/143092496

相关文章

  • 《深入理解Java虚拟机》读后笔记-垃圾收集器
    优点:与其他收集器的单线程相比简单而高效,对于内存资源受限的环境,它是所有收集器里额外内存消耗最小的。对于单核处理器或处理器核心数较少的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以获得最高的单线程收集效率应用场景:Serial收集器对于运行......
  • C系统编程通信方式——共享内存
        共享内存,标准IPC之一,也是进程间通信最快的一种方式。1.概念    所有的标准IPC都有一个内部ID作为唯一标识。内部ID的获取通过外部key,key的类型是key_t。key的获取方法有在头文件中定义所有key和通过ftok函数获取一个key。key_tftok(constchar*pathna......
  • 89. 模型边界线EdgesGeometry
    借助EdgesGeometry可以给模型设置一个模型边界线。长方体边线先用EdgesGeometry重新计算长方体几何体,返回一个新的几何体,然后用线模型LineSegments模型渲染新的几何体即可。constgeometry=newTHREE.BoxGeometry(50,50,50);constmaterial=newTHREE.MeshLambertM......
  • Java中的进程与线程(如果想知道Java中有关进程与线程的知识点,那么只看这一篇就足够了!)
        前言:在现代计算机系统中,进程和线程是实现并发和高效任务管理的核心概念。理解这两者的区别和联系,不仅对软件开发者至关重要,还能帮助用户更好地理解计算机的工作原理。✨✨✨这里是秋刀鱼不做梦的BLOG✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN......
  • SSM基于java的健身房俱乐部管理系统zbr14 线上选课 器械预定
    题目:SSM基于java的健身房俱乐部管理系统zbr14进度安排:(1)2024年11月1日-2024年11月15日 确定选题,下达任务书,撰写开题报告;(2)2024年11月15日-2024年12月20日提交开题报告定稿;(3)2024年12月21日-2025年3月14日 完成选题的设计、论文大纲的撰写;(4)2025年3月15日-2025年3月21日......
  • java计算机毕业设计高校入学报到系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着高等教育的不断发展,高校的招生规模持续扩大。每年新生入学报到期间,学校面临着大量复杂且繁琐的工作任务。传统的报到方式主要依赖人工操作,这......
  • java计算机毕业设计大学生竞赛报名系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景在当今的高等教育环境中,大学生竞赛已经成为提升大学生综合能力和专业素养的重要途径。随着各类学科竞赛数量的不断增加,参赛师生数量也逐年上升,并......
  • 五,Java控制流程语句最详细笔记
    Java控制流程语句:顺序结构详解在Java编程中,顺序结构是最基本的程序结构之一。它遵循简单的规则:按照代码编写的顺序,自上而下执行。这意味着程序会从上到下依次执行每一行代码,直到最后一行。本文将通过示例代码详细解释顺序结构的概念和应用。顺序结构的概念顺序结构是最简单的程......
  • 四,Java运算符详细分类及使用方法介绍
    Java编程基础:全面掌握运算符在Java编程中,运算符是用于执行程序代码运算的符号。它们可以对变量和值执行各种操作,如算术运算、比较、逻辑判断等。本文将详细探讨Java中的各种运算符,包括算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符和三目运算符,并提供相应的代码示例......
  • WebRTC JavaScript API使用和介绍
    目录API列表API列表WebRTCJavaScriptAPI是WebReal-TimeCommunication(WebRTC)技术的核心,它允许网页应用实现浏览器间的实时音频、视频通信及数据共享,无需依赖插件。navigator.mediaDevices.getUserMedia()作用:请求访问用户的媒体设备(如摄像头和麦克风)。代码示例......