栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java小知识:遍历64千万次和遍历4千万次一样快?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java小知识:遍历64千万次和遍历4千万次一样快?

引子

先看以下一段代码及其输出结果:

 

思考

第一个循环的次数为 ,而第二个循环的次数为 ,循环次数相差了四倍,用时却几乎相同!

原因

首先我们需要了解下计算机的缓存结构

  • cpu进行计算时,所有的数据都从 CPU Cache(高速缓存)之中读取。若 CPU Cache 中无数据,则再将数据从内存读取到 CPU Cache
  • CPU Cache 与 内存 进行一次交互时,使用 CacheLine (大小为64Bytes) 存储一次交互的数据

对于上图程序中的数组来说,无论是访问下标在 16~31 间的哪个数据,CacheLine 都将十六个数据(64 / 4 = 16)一并读取至 CPU Cache 之中,故从计算机架构上考虑,读取 nums[16]~nums[31] 和单独读取 nums[16] (写入CacheLine)的(缓存交互)速度是相同的。

验证

将第二个循环的 i += 16 更改为 i += 32,其速度相较第一个循环几乎快了一倍!(缓存交互次数减少一半)

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/285375.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号