美文网首页
伪共享-false sharing

伪共享-false sharing

作者: 海德堡绝尘 | 来源:发表于2020-01-16 16:03 被阅读0次

伪共享
1. cpu与主存之间的缓存
速度:1级缓存>2级缓存>3级缓存>主存
2. 缓存以行为单位,每行2的幂次方个字节;
3. 一个缓存行可能有多个变量而不是只一个
4. 每个缓存行同一时间只能一个线程访问;
5. 一个数组中内存地址相邻的元素会优先放入同一个缓存行
6. 多线程下,多个线程并发访问一个缓存行中的多个变量,引发竞争cache行

解决办法:

1. jdk8以前:字节填充
2. JDK8中提供了一个sun.misc.Contended注解(JVM运行时加 -XX:-RestrictContended 参数后 @sun.misc.Contended 注解才有效)

1.字节填充:

public final static class FilledLong {
    public volatile long value = 0L;
    public long p1, p2, p3, p4, p5, p6;     
}

一个缓存行64个字节:value+6个long=56个字节+8个字节的对象头(对象都有)
2.注解

@sun.misc.Contended 
public final static class FilledLong {
    public volatile long value = 0L;
}

扩展1.注解在jdk中的应用
扩展2.对象头

相关文章

  • 伪共享-false sharing

    伪共享1. cpu与主存之间的缓存速度:1级缓存>2级缓存>3级缓存>主存2. 缓存以行为单位,每行2的幂次方个字...

  • 伪共享(false sharing)

    背景: 在对称多处理器(SMP)系统中,每个处理器都有各自的本地cache(local cache)。内存系统必须...

  • 伪共享

    转载于 杂谈 什么是伪共享(false sharing)?[https://www.cnblogs.com/ton...

  • 伪共享(false sharing)详解

    一、什么是伪共享 CPU缓存系统中是以缓存行(cache line)为单位存储的。目前主流的CPU Cache的C...

  • 杂谈 什么是伪共享(false sharing)?

    问题 (1)什么是 CPU 缓存行? (2)什么是内存屏障? (3)什么是伪共享? (4)如何避免伪共享? CPU...

  • 杂谈 什么是伪共享(false sharing)?

    问题 (1)什么是 CPU 缓存行? (2)什么是内存屏障? (3)什么是伪共享? (4)如何避免伪共享? CPU...

  • Java中的伪共享(false sharing)

    维基百科中对伪共享的定义如下: 其大致意思是:CPU的缓存是以缓存行(cache line)为单位进行缓存的,当多...

  • @Contended

    表示被注解的类或/字段可能存在内存竞争,通常采用伪共享(false sharing)。此注释用作提示,此类对象和字...

  • 伪共享(False Sharing)和缓存行(Cache Lin

    前言 在上篇介绍LongAdder的文章中,我们最后留下了一个问题,为什么Cell中要插入很多个实际上并没有使用的...

  • 【Java】一文全面了解伪共享(false sharing)问题

    通过本文,可以收获如下知识:① MESI协议相关② 图例讲解伪共享问题③ 实例讲解伪共享问题带来的性能问题④ 使用...

网友评论

      本文标题:伪共享-false sharing

      本文链接:https://www.haomeiwen.com/subject/npgfzctx.html