Jdk 内存伪共享

一、什么是伪共享

5e4c5823c16c4a55a07f3fcf014678ea.png
数据X、Y、Z被加载到同一Cache Line中,线程A在Core1上修改X,而修改X会导致其所在的所有核上的缓存行均失效;假设此时线程B在Core2上读取Y,由于X所在的缓存行已经失效,所有Core2必须从内存中重新读取。线程A的操作不会修改Y,但是由于X和Y共享的是一个缓存行,就导致线程B不能很好地利用Cache,这其实就是伪共享。简单来说,伪共享指的是由于共享缓存行导致缓存无效的场景

1.1 Disruptor中如何避免伪共享

Disruptor是采用缓存行填充的方法来避免伪共享的

1.2 Contended注解方式

在JDK1.8中,新增了一种注解@sun.misc.Contended来使各个变量在Cache Line中分隔开。其原理是在使用此注解的对象或字段的前后各增加128字节大小的padding,使用2倍于大多数硬件缓存行的大小来避免相邻扇区预取导致的伪共享冲突。可以在类前或属性前加上此注释:

// 类前加上代表整个类的每个变量都会在单独的Cache Line中
@sun.misc.Contended
@SuppressWarnings("restriction")
public class ContendedData {
    int value;
    long modifyTime;
    boolean flag;
    long createTime;
    char key;
}

或者:

// 属性前加上时需要加上组标签
@SuppressWarnings("restriction")
public class ContendedGroupData {
    @sun.misc.Contended("group1")
    int value;
    @sun.misc.Contended("group1")
    long modifyTime;
    @sun.misc.Contended("group2")
    boolean flag;
    @sun.misc.Contended("group3")
    long createTime;
    @sun.misc.Contended("group3")
    char key;
}

采取上述措施图示:
8632ef8c7b7b4dddb503c754f1092f23.png
在默认情况下,@Contended注解只用于Java核心类,比如rt包下的类。 如果用户类路径下的类需要使用这个注解,则需要添加JVM参数:-XX:-RestrictContended。填充的宽度默认为128,要自定义宽度则可以设置-XX:ContendedPaddingWidth参数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

碳排放预测(粉丝免费) | 基于深度学习的碳排放预测模型

效果分析 基本介绍 基于深度学习的碳排放预测模型 碳排放量预测是碳中和目标达成工作中的重要组成部分。为了实时预测碳排放量,本文深度学习在数据特征提取方面的优势和长短期记忆人工神经网络解决时间序列各个观测值依赖性问题的特点,提出了一种基于深度学习的碳排放量预测模…

springboot图书个性化推荐系统的设计与实现+1w字文档

项目演示视频: 【源码免费送】基于springboot图书个性化推荐系统的设计与实现录像 摘 要 本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项…

Linux基础-socket详解、TCP/UDP

文章目录 一、Socket 介绍二、Socket 通信模型三、Socket 常用函数1 创建套接字2 绑定套接字3、监听连接4、接受连接5、接收和发送数据接收数据发送数据 6、关闭套接字 四、Socket编程试验1、源码server.cclient.c 2、编译:3、执行结果 五、补充TCP和UDP协议的Socke…

Agisoft Metashape 自定义底图

Agisoft Metashape 自定义底图 前言 Agisoft Metashape 从2.0.2 版本开始,Agisoft Metashape Professional 和 Agisoft Viewer 支持自定义底图,可用于模型和正射视图模式。本文以添加Esri World Image卫星底图图源为例,介绍Agisoft Metashape 自定义底图的方法。 添加自定…

YOLOV8 pycharm

1 下载pycharm 社区版 https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows 2 安装 3 新建 4 选择 文件-> setting 配置环境变量 5 添加conda 环境

vite打包配置

目录 minify默认是esbuild,不能启动下面配置 使用: plugins: [viteMockServe({mockPath: mock})]根目录新建mock/index.ts. 有例子Mock file examples:https://www.npmjs.com/package/vite-plugin-mock-server 开发环境生产环境地址替换。根…

php7.4在foreach中对使用数据使用无法??[]判读,无法使用引用传递

代码如下图:这样子在foreach中是无法修改class_history的。正确的应该是去掉??[]判断。 public function actionY(){$array [name>aaa,class_history>[[class_name>一班,class_num>1],[class_name>二班,class_num>2]]];foreach ($array[class_…

营收不过万,世道艰难,月末总结复盘ing

2024已经走过了1/3,从事实上看确实如大佬们所说世道越来越难,过往的几个月份营收只有区区10000。向下兼容的话从绝对值上看收入确实不少了,从相对值上看又少的可怜,只能满足温饱而已。 这个月上半场成绩非常喜人,半个月…

IDEA在setting中已经勾选了Use non-modal commit interface选项,还是不显示commit侧边栏

今天在拉取项目后,发现我得项目不显示commit的侧边栏,导致我的项目修改没有一个提示。 去网上搜了一些方案,都是让修改seting中的下图中的选项 但是我勾选上还是没有任何效果,侧边栏还是不显示commit的选项。 然后经过重重检索&…

C语言——柔性数组

1、柔性数组是什么 在C语言中,柔性数组成员(Flexible Array Member,简称FAM)是C99标准中引入的一种结构体成员,用于表示一个大小可变的数组。它是结构体的最后一个成员,不像普通的数组,没有固定…

spring boot运行过程中动态加载Controller

1.被加载的jar代码 package com.dl;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class App {public static void main(String[] args) {SpringApplication.run(A…

stm32f103c8t6学习笔记(学习B站up江科大自化协)-UNIX时间戳、BKPRTC

UNIX时间戳 UNIX时间戳最早是在UNIX系统使用的,所以叫做UNIX时间戳,之后很多由UNIX演变而来的系统也继承了UNIX时间戳的规定,目前linux,windows,安卓这些操作系统的底层计时系统都是用UNIX时间戳 时间戳这个计时系统和…

http请求报文的组成与作用?

http请求报文的组成与作用? 一、http 的请求报文组成二、请求行(Request Line)三、请求头部(Request Headers)四、请求体(Request Body)五、响应头部 (Response Headers &#xff09…

部署YUM仓库和NFS共享存储服务

目录 1. YUM仓库服务 1.1 YUM概述 1.2 准备安装源 1.3 yum在线源替换方法 2.制作YUM源 2.1制作ftp源 3.yum软件包的下载方式 4.NFS共享存储服务 4.1 NFS 4.2 NFS网络文件系统 4.3 NFS配置 1. YUM仓库服务 1.1 YUM概述 yum是一个基于RPM包(是Red-Ha…

MAC 本地搭建Dify环境

Dify 介绍 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过…

运维的利器–监控–zabbix–第二步:建设–汉化补丁--导致乱码问题

文章目录 问题原因解决方法 问题 点击对应主机的【图形】即可看到以下乱码情况 原因 上述的图标数据,下面的小白框表示乱码含义,是因为我们改了zabbix的 语言为中文 解决方法 服务器需要安装字体 [rootzabbix-server01 ~]#yum -y install wqy-mic…

go设计模式之抽象工厂模式

抽象工厂模式 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致…

maven-依赖管理

依赖配置 https://mvnrepository.com/?__cf_chl_rt_tkvRzDsumjmJ_HF95MK4otu9XluVRHGqAY5Wv4UQYETR8-1714103058-0.0.1.1-1557 <dependencies><dependency><groupId></groupId><artifactId></artifactId><version></version>…

精确测量地面沉降:静力水准仪的应用

地面沉降是一个全球性的地质问题&#xff0c;它可能对建筑物、道路和地下设施造成严重的损害。因此&#xff0c;对地面沉降进行精确测量和监测至关重要。静力水准仪作为一种先进的测量设备&#xff0c;为地面沉降的精确测量提供了有效手段。本文将探讨静力水准仪在地面沉降测量…

Dokcer容器分布式搭建LNMP+wordpress论坛

目录 引言 一、架构环境 二、搭建容器 &#xff08;一&#xff09;自定义网络 &#xff08;二&#xff09;搭建nginx容器 1.文件准备 2.查看与编辑文件 3.生成镜像 4.创建容器 &#xff08;三&#xff09;搭建MySQL容器 1.文件准备 2.查看与编辑文件 3.生成镜像 …
最新文章