CPU三级缓存和缓存失效

文章介绍了CPU的多级缓存系统,特别是L1、L2和L3缓存的层次结构及其访问速度。缓存行通常为64字节,而示例代码展示了在多线程环境下,由于缓存失效导致的性能影响。在给定的Java代码中,两个线程分别修改同一对象的不同属性,导致频繁的缓存失效,从而增加了执行时间。使用volatile关键字可以显著减少这种影响。

CPU三级缓存

	CPU是由多级缓存构成,不同的cpu结构有不同等级的缓存,每个等级的缓存大小也不一样;
	常规的CPU3级别组成L1,L2,L3(也有L4),内存大小L1<L2<L3;访问速度L1>L2>L3>直接内存
	常见的4核心8线程:一个CPU有两个core,每个core都有L1,L2,两个core共享L3

缓存行

	缓存行的大小一般为64字节,cpu一次性读取缓存行数据大小

缓存失效

	public class CpuCacheTest {
    public static void main(String[] args) throws InterruptedException {
        Pointer pointer = new Pointer();
        long forLength=100000000;
        long start = System.currentTimeMillis();
        Thread t1 = new Thread(()->{
            for (int i = 0; i < forLength; i++) {
                pointer.a.value++;
            }
        });
        Thread t2 = new Thread(()->{
            for (int i = 0; i < forLength; i++) {
                pointer.b.value++;
            }
        });
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        long end=System.currentTimeMillis();
        System.out.println("消耗时间:"+(end - start));

    }
}

class Pointer{
    MyLong a=new MyLong();
    MyLong b=new MyLong();
}


class MyLong{
     volatile long value;
     //long b1,b2,b3,b4,b5,b6,b7;//添加这一行消耗时间缩短7倍
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值