JAVA内存模型!=JVM内存模型

news2024/9/30 12:47:04

文章目录

  • 前言
  • JVM内存模型
  • JAVA内存模型
  • JAVA内存模型解释的问题
    • 可见性问题
    • 一致性问题
  • 总结

前言

有很多JAVA开发人员,在被问起:“你知道Java内存模型吗?”,都会回答:“知道,JAVA内存模型分为方法区、堆、…”。

虽说“概念”这个词发明出来是为了方便交流和说明问题的,不用太过于较真。但是,答非所问就是你的不对了。

如果对两者的概念混淆不清的,希望在看完本文后对你有所帮助。

JVM内存模型

先说什么是JVM内存模型,我相信99.99%的JAVA开发人员都知道,因为面试经常会被问到。。。

没错,就是方法区、堆、…

叫法也是五花八门,“JVM内存布局“、“JVM内存划分“又或是“JVM内存结构“,总有一个你听过的。

官方的叫法其实是“运行时数据区域”。这里是官方的说明:

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5

如果想快速了解的,可以移步至Java面试中经常被问到的15道JVM面试题,里面有JVM内存相关的面试题。

那JAVA内存模型又是什么呢?

JAVA内存模型

在了解Java内存模型之前,建议先对计算机存储器的层次结构有基本的了解,特别是缓存、主存以及它们之间的交互关系。

JAVA内存模型简称:JMM(Java Memory Model),分为主内存和工作内存。

  • 主内存是所有线程共享的区域,包含了所有共享变量、类信息、实例对象等,也就是运行时数据区域中的堆和方法区的数据。
  • 工作内存是每个线程在执行时的私有空间,包含了局部变量表、操作数栈等,也就是运行时数据区域中的程序计数器和栈的数据。

在这里插入图片描述

如果看过官方的文档,你会发现对内存模型的描述是在线程和锁的章节中,可见对其描述的目的。

感兴趣的可以去官方文档瞅一瞅

简而言之,JAVA内存模型解释了在多线程编程中对共享数据访问和修改会产生的一些问题和原因,以及如何解决这些问题。

下面一一说明。

JAVA内存模型解释的问题

可见性问题

先了解一下线程执行时主内存和工作内存是如何交互的:

线程在执行时,会将主内存中的数据复制到自己的工作内存中进行操作,操作完成后再将结果刷新回主内存。

为了提高性能,JVM和处理器会对此过程进行优化:尽量减少主内存和工作内存的数据交换次数。这就意味着两点:

  • 当线程需要访问一个共享变量时,不会每次都从主内存中读取,而是访问工作内存中已有的这个变量。
  • 当线程修改了共享变量的值时,可能不会立即写回主内存。

这时候就会存在一个问题,如下面的示例代码。

readerThread 可能会永远看不到flag被设置为true,因为它一直在自己的工作内存中查看flag的旧值。

这种“线程对变量的修改对其他线程不可见”,就是可见性问题。

为了解决可见性问题,JMM提供了 volatile 关键字。它会告诉JVM和硬件这个变量是易变的,不应该被优化。意味着两点:

  • 当线程需要访问一个 volatile 共享变量时,每次从主内存获取最新的值。
  • 当线程修改了 volatile 变量的值,该变量的新值会立即被同步到主内存。

在这里插入图片描述

​示例代码中的flagvolatile 修饰后,readerThread 会在flag更新后去主内存获取最新的值,然后继续向下执行。

一致性问题

JMM还解释了在多线程环境下,由于内存访问的并发性和编译器、处理器优化的影响,会发生数据不一致的问题。如:

  • 多线程在并发访问同一内存位置时,导致的数据不一致。

在这里插入图片描述

  • 一些非原子操作,例如i++,在多线程的环境下的的数据不一致。

在这里插入图片描述

  • CPU时间片轮转和指令重排序导致多线程环境下的数据不一致。

对于以上产生问题的几个场景,只要可以协调线程的执行顺序,确保结果是按照某种全局顺序执行的,就可以解决数据不一致的问题。

Java 开发人员都知道,通过同步机制可以保证这一点。

总结

虽然JAVA内存模型!=JVM内存模型,但两者也有一定的关联。

通过对JAVA内存模型的了解,能够对并发编程中存在的问题(可见性、原子性、有序性)有清晰的认识以及应对方案。

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

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

相关文章

悟透自己、悟透生活、悟透人生(此文无价)

很多人都会有这样的疑问:“为什么听了很多道理,却依然没有过好这一生?” 古人给出了这样的回答。 王阳明曾说:“知行合一。” 老子则言:“知人者智,自知者明。” 可见,一切问题的根源都出在了我…

CSDN 的 GIt 是没东西吗

虽然说吧 CSDN 的博客也就那样,记得去年的时候 CSDN 出了一个 Git 代码库,被骂得要死,基本上是从外面搬了一堆代码回来。 这回 CSDN 又玩了个新东西,干脆你可以把你的博客文章同步到你在 CSDN 开的代码库上了。 如何同步 在 CS…

数据增强之imgaug的使用

包的导入 path = r"D:\\" # sometimes = lambda aug: iaa.Sometimes(0.5, aug) img = cv2.imread("D:\\photo\\test.jpg") img = cv2.resize(img,(128,128)) # img = cv2.cvtColor(img,cv2.COLOR_RGBA2GRAY) cv2.imwrite(path+"img.jpg",img)随…

python并发编程实战

python并发编程有三种 多线程Thread多进程Process多协程Coroutine cpu密集型计算 cpu密集型也叫计算密集型,是指I/O在很短的时间就可以完成,cpu需要大量的计算处理,特点是cpu占用率相当高 例如:压缩解压缩、加密解密、正则表达…

【Qt】开发环境与下载

这里写目录标题 1 Qt的开发工具概述2 Qt的下载2.1 下载Qt SDK 3. 认识SDK中的重要工具 1 Qt的开发工具概述 Qt支持持多种开发工具,其中⽐较常⽤的开发工具有:Qt Creator、Visual Studio、Eclipse. (1) QtCreator Qt Creator 是⼀个轻量级的跨平台集成…

iot网关是什么?iot网关在工业领域的应用-天拓四方

一、IoT网关的定义 IoT网关,即物联网网关,是物联网(IoT)系统中的重要组成部分。它主要实现感知网络与通信网络,以及不同类型感知网络之间的协议转换,既能够支持广域互联,也能满足局域互联的需求…

windows系统下Telnet工具的安装步骤

通过控制面板启用Telnet客户端 点击“确定”按钮,按照系统提示完成安装。 打开cmd,输入telnet就可以了

APISIX 联动雷池 WAF 实现 Web 安全防护

Apache APISIX 是一个动态、实时、高性能的云原生 API 网关,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。 雷池是由长亭科技开发的 WAF 系统,提供对 HTTP 请求的安全请求,提供完整的 API 管理和…

【盘一盘】加密软件有哪些?10款电脑文件加密软件超好用推荐!让您的数据更安全!

在信息洪流中,数据安全如古战场上的坚固堡垒,至关重要。 古人云:"机密深藏,方能安身立命。" 为此,我特意搜罗了10款电脑文件加密软件,它们如同现代版的"八卦阵",既能保护…

华为/海思 Hi3516CV610 4K@20,6M@30 分辨率,1T 算力 NPU

总体介绍 Hi3516CV610 是一颗应用在安防市场的 IPC SoC 。在开放操作系统、新一代视频编解码标准、 网络安全和隐私保护、人工智能方面引领行业发 展,主要面向室内外场景下的枪机、球机、半球 机、海螺机、枪球一体机、双目长短焦机等产品 形态,打…

Spring - @Import注解

文章目录 基本用法源码分析ConfigurationClassPostProcessorConfigurationClass SourceClassgetImportsprocessImports处理 ImportSelectorImportSelector 接口DeferredImportSelector 处理 ImportBeanDefinitionRegistrarImportBeanDefinitionRegistrar 接口 处理Configuratio…

全同态加密算法概览

我们前面有谈到《Paillier半同态加密算法》,半同态加密算法除了支持密文加法运算的 Paillier 算法,还有支持密文乘法计算的 RSA 算法,早期的PSI(隐私求交)和PIR(匿踪查询)都有使用基于RSA盲签名技术来实现。今天我们来谈谈能够有效支持任意函…

【Git原理与使用】分支管理

分支管理 1.理解分支2.创建分支2.1创建分支2.2切换分支2.3合并分支 3.删除分支4.合并冲突4.分支管理策略5.分支策略6.bug分支7.删除临时分支8.小结 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励&…

美客多自养号测评的常见问题与解决方案,从零开始的技术指南

美客多(MercadoLibre)主要专注于拉丁美洲市场。涵盖了多个国家,包括阿根廷、巴西、墨西哥、智利、哥伦比亚等,在这些国家占据了重要份额。对于卖家来说,要充分了解平台的特点和市场需求,制定合理的营销策略,不断提升自…

vue使用高德地图,点标记+轨迹

<template><!-- 轨迹--><divv-if"visible"ref"pageTotal"v-loading"loading"class"page-total"><div><divref"pageHead"class"page-head"><div class"head-title" /&…

《最高人民法院关于审理民间借贷案件适用法律若干问题的规定》(最新)民间借贷司法解释全文

原文地址 编辑于&#xff1a; 贵格律师事务所 2024年06月11日 16:04 上海 “ 为正确审理民间借贷纠纷案件&#xff0c;根据《中华人民共和国民法典》《中华人民共和国民事诉讼法》《中华人民共和国刑事诉讼法》等相关法律之规定&#xff0c;结合审判实践&#xff0c;制定本规定…

AI生成垃圾内容对互联网的冲击与应对:一场持续扩展的危机

引言 随着生成式AI技术的迅猛发展&#xff0c;人工智能在内容生产上的应用已深刻改变了互联网的内容生态。越来越多由AI生成的低质量内容正在淹没搜索引擎、内容社区、甚至学术领域。通过自动化工具&#xff0c;创建大规模虚假账号矩阵、批量生成无价值信息、甚至操纵搜索引擎…

叉车防撞系统方案,引领安全作业新时代

在现代工业的舞台上&#xff0c;叉车如同忙碌的“搬运工”&#xff0c;在仓储和制造环境中发挥着不可或缺的作用。然而&#xff0c;随着叉车使用频率的不断攀升&#xff0c;安全事故也如影随形&#xff0c;给企业带来经济损失的同时&#xff0c;更严重威胁着操作人员的生命安全…

大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

详解DNS工作原理及实例分析

DNS概述 互联网上的主机能够互相识别、访问&#xff0c;通过分配IP地址的方式进行的。全球主机数量众多&#xff0c;人们要记住像202.12.23.203这样的IP地址&#xff0c;不仅记不住&#xff0c;而且容易出错&#xff0c;于是&#xff0c;人们采用域名的形式&#xff0c;如网易…