`
lemonhandsome
  • 浏览: 11832 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

伪共享

 
阅读更多

一、伪共享和CPU的缓存机制有关

二、cpu缓存结构

三、缓存是以行为单位存在在cache中的,通常而言,一个缓存行大概是64byte。对于java类而言,一个javalong的对象长度为8字节,因此一个缓存行就是8个long的长度。

四、对于位于同一个缓存行上的两个变量,被不同线程操作,会引起竞争消耗

五、解决方式

1、使用注解@sun.misc.Contended,且在jvm启动参数增加-XX:-RestrictContended

2、定义多个无效变量,用来填充隔离这两个变量

        volatile long x;
        //这些变量的存在,会使x,y位于不同的缓存行
        long p1, p2, p3, p4, p5, p6, p7;
        volatile long y;

六、因为 @sun.misc.Contended在ConcurrentHashMap中被使用,所以,日常的jvm参数优化也可以考虑使用-XX:-RestrictContended

 

参考文章:https://blog.csdn.net/jjc4261/article/details/125486233

分享到:
评论

相关推荐

    缓存行和伪共享

    缓存行和伪共享

    Java中的伪共享详解及解决方案.docx

    ### Java中的伪共享详解及解决方案 #### 1. 什么是伪共享 伪共享(False Sharing)是在多线程环境中出现的一种现象,特别是在涉及多核处理器的情况下更为显著。在现代计算机体系结构中,CPU缓存系统是以缓存行(Cache...

    Java 中的伪共享详解及解决方案

    "Java 中的伪共享详解及解决方案" Java 中的伪共享问题是指在多线程情况下,多个线程访问共享同一个缓存行的变量时,可能会无意中影响彼此的性能。这种问题的出现是因为 CPU 缓存系统中是以缓存行(cache line)为...

    【并发编程】 — 伪共享(False Sharing)底层原理及其解决方式

    文章目录1 什么是伪共享1.1 从疑问说起 — 难道JMM中不存在局部性原理???1.2 缓存行的概念1.3 伪共享(False Sharing)的概念 + 其可能引发的性能问题2 如何避免伪共享 — 数据填充2.1 不使用数据填充时的效率...

    论文研究-支持QoS服务的SCTP中伪共享问题的研究.pdf

    多流是流控制传输协议(SCTP)的一个重要特点,利用这个特点可以在同一个关联中传输不同优先级的...主要研究了伪共享对于SCTP性能的危害,并通过对SCTP拥塞系统的改进解决了伪共享问题,最后通过仿真实验进行了证实。

    分析题精简背诵笔记马原部分.pdf

    知识,分析为何“伪共享”现象的出现是不可避免的?答:“伪共享”现象的出现,从辩证法的角度看,体现了矛盾的普遍性和特殊性。一方面,矛盾的普遍性意味着在任何事物中都存在着矛盾,共享单车领域也不例外。新事物...

    复盘“共享经济”:互联网新败局的警示精品报告2020.pdf

    而“伪共享”通常指的是一种打着共享经济旗号的商业模式,实际上却是互联网形式的租赁,如共享单车平台。 另外,文章还会探讨传统企业与互联网的融合。这涉及到传统企业如何借助互联网技术进行转型升级,实现与新兴...

    p71 - p91 CPU是如何来执行任务的

    3. 利用特定的数据布局技术,如 cacheline padding,增加相邻变量之间的距离,以减少伪共享的可能性。 总的来说,CPU通过高效的缓存系统和多核心架构来执行任务。理解CPU如何读写数据,以及如何管理缓存,对于优化...

    鲲鹏开发套件 代码样例 (1).pdf

    本示例模拟了伪共享现象,主要通过鲲鹏性能分析工具访存分析中伪共享分析功能,观测到这一问题,通过定义变量时进行内存对齐。 鲲鹏开发套件代码样例为开发者提供了一系列实用的代码样例,旨在帮助开发者快速地检测...

    Java 80 道面试题及答案.docx

    本文对 Java 并发编程中的重要知识点进行了总结,涵盖了 volatile 变量、原子操作、内存屏障、happens-before 保证、多线程环境下的伪共享和 Busy spin 等概念。 volatile 变量 Java 中可以创建 volatile 类型的...

    Disruptor进阶.pdf

    Disruptor通过填充(Padding)技术将不相关的变量分散到不同的缓存行中,确保关键数据不与其他变量共存于同一缓存行,从而避免了伪共享问题。例如,Sequence类中的paddedValue数组就是用来隔离计数器的,确保计数器...

    Disruptor进阶.docx

    综上所述,Disruptor通过优化的线程间通信机制、避免伪共享、高效的数据结构以及灵活的工作模式,实现了在Java中极高的并发处理性能,尤其适合于金融交易、实时数据分析等对延迟敏感的应用场景。在设计并发程序时,...

    iocp udp 本机基准测试程序

    rupd_context的),防止出现多核机器上出现伪共享问题. 在自己机器上测试速度稳定达到16Gbit,叫上一版本较稳定(上一版本有较大波动). thread context switch 平局值在5W次左右,比起之前的20W此有非常大的提升,可以...

    深入理解MESI缓存一致性协议 提升多核CPU性能的关键

    此外,还探讨了缓存行伪共享问题以及MESI优化所带来的挑战和解决方案。最后,文章还讨论了存储缓存(Store Buffers)及其在防止CPU切换状态时的阻塞问题中的作用。整体上,本文为理解和优化现代多核处理器提供了深入...

    120道Java面试题以及答案.doc

    以上内容主要涵盖了Java多线程编程中的volatile关键字特性、线程同步策略、wait/notify机制、伪共享问题和忙等待的概念。理解和掌握这些知识点对于成为一名专业的Java开发者至关重要,尤其是在处理高并发和性能敏感...

    java面试题.doc

    总结来说,Java中的多线程和并发控制涉及多个方面,包括`volatile`关键字的使用、正确的等待/通知机制实现、以及高级概念如伪共享和Busy Spin的理解。掌握这些知识点有助于开发者编写出高效、可靠的多线程应用程序。

    OpenMP API 用户指南(Sun Studio).pdf

    - **减少伪共享**: 给出了一些减少伪共享的策略。 - **操作系统优化功能**: 探讨了操作系统层面的一些优化机制,如 NUMA 意识、进程优先级调整等。 #### A. 子句在指令中的放置 这一附录详细说明了如何正确地在 ...

    基于多核处理器的程序性能优化方法.pdf

    然而,在多核环境下,单纯依赖单核优化策略是不够的,因为多核的并行执行引入了新的挑战,如临界区、负载均衡和伪共享等问题。临界区是指同一时间只能有一个线程访问的共享资源,优化临界区等待可以减少线程间的竞争...

Global site tag (gtag.js) - Google Analytics