本周三(2020-09-23)我进行了disruptor的分享,其中disruptor的一个优化就是缓存友好。

我就上网搜了资料,分享下在实际工作中,如何写出缓存友好的代码。

0 缓存简介

wiki链接:Cache_(computing))

计算机缓存的产生是一下两种情况的权衡:

  1. 大小和速度(缓存越大,意味着物理距离上越远,这样就会影响处理速度)
  2. 前进但昂贵的的存储技术和便宜但容易制造的存储技术(前者比如SRAM,后者比如DRAM或硬盘)

缓存有两个优势:

  1. 延迟
  2. 吞吐量

现在的计算机缓存有如下两个局部性原理:

  • 时间局部性,基于假设:最近引用的对象在不久的将来大概率会再次引用

Temporal Locality: If an address gets accessed, then it is very likely that the exact same address will be accessed once again in the near future.

int a = 1;
//  'a' will hopefully be used again soon
  • 空间局部性,基于假设:需要引用的对象周围的对象大概率会被引用

Spatial Locality: If an address gets accessed, then it is very likely that nearby addresses will be accessed in the near future.

int[] arr = new int[10];
arr[5] = 10;
//  'A[4]' or 'A[6]' will hopefully be used soon

参考资料:

  1. Writing Cache-Friendly Code

标签: Java

添加新评论