【一文搞懂JVM的内存屏障】

要命的问题: 什么是线程的安全性?怎么保证?jvm什么是的内存屏障?他有什么作用?

**线程的安全性是指:**指在多线程环境下,多个线程同时访问同一资源时不会产生意外结果或导致数据出错的状态。其实就是保证共享数据操作的三个方面:原子性、可见性、有序性。

java语言层面的基本保障操作:
volatile:可见性、有序性
synchronized:原子性、可见性、有序性
native类:unsafe

扫盲一下:JVM层面【这里不是java语言层面】 的内存屏障有以下4种:

1、LoadLoad屏障: 有两条Load指令load1、load2,一前一后,如果jvm禁止了这两条指令重排序,那就会转变成load1、loadload、load2这样的指令,load2及后续的操作要等load1执行完。

2、StoreStore屏障: 有两条Store指令store1、store2,一前一后,如果jvm禁止了这两条指令重排序,那就会转变成store1、storestore、store2这样的指令,store2及后续的更改操作要等store1指令执行完。

3、LoadStore屏障: 有两条指令load1、store2,一前一后,如果jvm禁止了这两条指令重排序,那就会转变成load1、loadstore、store2这样的指令,store2及后续的更改操作要等load1指令执行完。

4、StoreLoad屏障: 有两条指令store1、load2,一前一后,如果jvm禁止了这两条指令重排序,那就会转变成store1、storestore、load2这样的指令,load2及后续的更改操作要等store1指令执行完。

认识一下java字节码文件的汇编指令:
在这里插入图片描述

Load:对应 读操作;Store:对应 更改操作。

打个比方:我不想让排好队的队伍出现有插队或者前后调换顺序的情况出现,我就给队伍的可能出现这种情况,爱搞事情的每个人前后都加个隔板把他们隔离、固定起来,咋样?虽说很笨重,但是效果很稳。这个隔板就相当于这个屏障,爱调换顺序搞事情的人就对应这几条不能重排序的指令。【我们这里讨论的是高并发多线程有“数据共享”的环境】

示例:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于python的室内老人实时摔倒智能监测系统(康复训练检测+代码)

概述 导入所需的库,包括cv2、和numpy。 定义了一个用于计算角度的函数calculate_angle(a, b, c),其中a、b和c是三个关键点的坐标。 初始化姿态检测和绘图工具。 打开并读取视频文件。 -摔倒检测(fallen) 循环遍历视频的每一帧…

“消费新纪元:从传统消费到消费增值的跨越!“

你是否已经厌倦了传统消费模式,感觉每一次购物只是让钱从左手流到右手?现在,一个新的消费模式正在兴起,它让你的消费变得更有价值! 消费增值是一种创新的消费理念,它让你在享受优质商品和服务的同时&#x…

Java并发之同步三:Condition条件队列

一、总览 二、源码分析 2.1 人口 public Condition newCondition() {return sync.newCondition();}final ConditionObject newCondition() {return new ConditionObject();}public class ConditionObject implements Condition, java.io.Serializable {private static final lo…

JVM运行时数据区(上篇)

JVM运行时数据区可分为线程共享的堆,方法区和线程独享的虚拟机栈、本地方法栈、程序计时器此外还有一个单独的直接内存,如下图所述: 程序计数器 程序计数器(Program Counter Register)也叫PC寄存器,每个线…

Windows安装Rust环境(详细教程)

一、 安装mingw64(C语言环境) Rust默认使用的C语言依赖Visual Studio,但该工具占用空间大安装也较为麻烦,可以选用轻便的mingw64包。 1.1 安装地址 (1) 下载地址1-GitHub:Releases niXman/mingw-builds-binaries GitHub (2) 下载地址2-W…

JRT界面打开器

开发BS界面时候有个问题,如果新做页面还没挂菜单,那么测试新页面有两个办法,一是把菜单挂上用,一是手输URL。而我在开发阶段两个事都不想干,那么怎么解决呢? 以前WebLoader启动时候会启动C#写的URL辅助器 …

【elfboard linux 开发板】10. 设备树与烧录

1. 设备树介绍 设备树由一系列被命名的node和property组成 可以描述如下信息: CPU的数量和类别内存基地址和大小总线和桥外设连接中断控制器和中断使用情况GPIO控制器和GPIO使用情况Clock 控制器和 Clock 使用情况 由dts文件以文本方式对系统设备树进行描述&…

2023.12.10查找,线性探测法

二叉树的重构 集合实现对图的dfs,bfs复写 插入排序 霍夫曼树,霍夫曼编码 查找成功,查找失败的期望值计算 9.给定散列表大小为11,散列函数为H(Key)Key%11。按照线性探测冲突解决策略连续插入散列值相同的4个元素。问:此时该散…

小白福音!一键获取Cookie,从此不再求人!

文章目录 📖 介绍 📖🏡 环境 🏡📒 使用方法 📒⚓️ 相关链接 ⚓️ 📖 介绍 📖 本文分享一个自己专为小白写的软件,该软件支持傻瓜式一件获取网页cookie 软件功能 Cookie…

STM32L051使用HAL库操作实例(14)- ADC采集电压

目录 一、前言 二、ADC外设简要说明 三、STM32CubeMX配置(本文使用的STM32CubeMX版本为6.1.2) 1.MCU选型 2.时钟使能 3.外部时钟配置 4.串口配置 5.ADC引脚配置 6.配置STM32CubeMX生成工程文件 7.点击GENERATE CODE生成工程文件 四、工程源码 …

上海AI实验室等开源,音频、音乐统一开发工具包Amphion

上海AI实验室、香港中文大学数据科学院、深圳大数据研究院联合开源了一个名为Amphion的音频、音乐和语音生成工具包。 Amphion可帮助开发人员研究文本生成音频、音乐等与音频相关的领域,可以在一个框架内完成,以解决生成模型黑箱、代码库分散、缺少评估…

蓝凌EIS智慧协同平台 多处SQL注入漏洞复现

0x01 产品简介 蓝凌EIS智慧协同平台是一款专为企业提供高效协同办公和团队合作的产品。该平台集成了各种协同工具和功能,旨在提升企业内部沟通、协作和信息共享的效率。 0x02 漏洞概述 由于蓝凌EIS智慧协同平台 doc_fileedit_word.aspx、frm_form_list_main.aspx、frm_butt…