作为一名非计算机科班出身的程序员对计算机的底层架构知之甚少,开发也一直以Java程序为主,写代码的时候很少考虑底层操作系统和硬件什么的。
直到今天开始学习Disruptor框架,里面提到了很多Cache的相关内容,才发现Java程序原也应该懂得计算机结构等基础知识!学习到Cache Line的概念,突然想到了以前看到的神奇的提高循环执行速度的神奇的7!
64位机器的Cache Line中可以保存8个word, 这是不是和神奇的7有关系呢?
我的64位计算机现在装的是32位的系统,那对我来说是3比较起作用,还是7比较起作用呢?
于是有了如下的一个简单实验
package com.eric.learn.javacore.test; public class FunLoop { public static void main(String[] args) { long[] huge_array = new long[(int) Math.pow(2, 25)]; buildHugeArray(huge_array); sequenceVisit(huge_array); batchVisitBy3(huge_array); batchVisitBy7(huge_array); } private static void batchVisitBy3(long[] huge_array){ long start = System.currentTimeMillis(); long length = huge_array.length; long loop_times = length - length % 3; for(int i = 0; i < loop_times; i+= 3){ long l = huge_array[i]; l = huge_array[i + 1]; l = huge_array[i + 2]; } long end = System.currentTimeMillis(); System.out.println("3 times batch visit cost " + (end -start) + " milliseconds"); } private static void batchVisitBy7(long[] huge_array) { long start = System.currentTimeMillis(); long length = huge_array.length; long loop_times = length - length % 7; for(int i = 0; i < loop_times; i+= 7){ long l = huge_array[i]; l = huge_array[i + 1]; l = huge_array[i + 2]; l = huge_array[i + 3]; l = huge_array[i + 4]; l = huge_array[i + 5]; l = huge_array[i + 6]; } long end = System.currentTimeMillis(); System.out.println("7 times batch visit cost " + (end -start) + " milliseconds"); } private static void sequenceVisit(long[] huge_array) { long start = System.currentTimeMillis(); long length = huge_array.length; for(int i =0 ; i< length; i++){ long l = huge_array[i]; } long end = System.currentTimeMillis(); System.out.println("sequence visit cost " + (end -start) + " milliseconds"); } private static void buildHugeArray(long[] huge_array) { for(int i=0; i < huge_array.length; i++){ huge_array[i] = (long) (Math.random() * Integer.MAX_VALUE); } } }
为了逻辑简单,在3或7批量的时候,忽略掉了最后的不再一个Loop内的内容。
然后是在我机器上的输出
sequence visit cost 50 milliseconds 7 times batch visit cost 17 milliseconds 3 times batch visit cost 30 milliseconds
还是跟最终的硬件结构相关!如果将来有了128位机器,那是不是最快的循环就是127了呢?
相关推荐
微信公众号性格测试 微信小测试源码 微信吸粉神奇 微信小游戏
**神奇注册表(WIN7)** 在Windows 7操作系统中,注册表是系统核心组成部分,存储着关于系统配置、应用程序设置等关键信息。它的工作原理是通过键值对的形式来组织数据,允许用户通过编辑注册表来调整系统行为或...
PSP神奇电池制作工具V6安装与使用图文教程 本文将详细介绍PSP神奇电池制作工具V6的安装和使用流程,包括神奇记忆棒的制作和神奇电池的制作两个部分。 神奇记忆棒制作 神奇记忆棒是PSP神奇电池制作工具V6的核心...
当A8达到近7日最低点并且连续两天处于负值,同时A8上穿其2日移动平均线时,视为买入点,用DRAWTEXT和STICKLINE函数在图表上以黄色标记和柱状图表示。 此外,文档还定义了不同周期的压力线和支撑线,如5天和10天的...
神奇磨皮是很好用的人像类的修图插件,简单方便,效果明显
这是来自网易时尚美容栏目的一个图片循环动画,它实现了自动循环的功能,当然了,下面的控制按钮,你也可以实现对图片的左右控制。对于这种在我们看来只能用FLASH实现的功能,现在却用JS实现了,感觉真是神奇啊,...
在压缩包中的文件"PerfectCalc.exe",根据.exe扩展名,我们可以推断这是一个Windows操作系统的可执行文件,这意味着“神奇计算器”可能是一个桌面应用程序。".exe"文件是程序的二进制形式,用户双击运行后可以在电脑...
通达信指标公式源码 神奇九转MACD副图指标 通达信指标公式源码 神奇九转MACD副图指标是基于通达信指标平台开发的一种技术指标,旨在帮助投资者和交易者更好地分析和预测市场走势。本指标的核心思想是结合了MACD...
傻瓜包通常意味着它包含了所有必要的文件和详细的教程,使得没有太多技术背景的用户也能轻松完成电池的制作。在使用这个包之前,你需要先备份你的原始电池数据,以防万一出现问题。 在制作过程中,你将需要以下步骤...
《神奇数学》是一本引人入胜的书籍,旨在引领读者深入探索数学的奇妙世界。这本书不仅适合对数学有深厚兴趣的人,也适合那些希望通过理解数学的奥秘来提升自己思维能力的读者。数学,这个看似冰冷严谨的学科,其实...
神奇万年历
一个传说很神奇的测试程序……一个传说很神奇的测试程序……一个传说很神奇的测试程序……一个传说很神奇的测试程序……一个传说很神奇的测试程序……
神奇手机维修培训教程 神奇手机维修培训教程 神奇手机维修培训教程
在C编程语言中,"神奇"往往意味着代码利用了语言的一些底层特性,如指针操作、内存管理、位操作或者一些不常见的控制结构。这样的代码可能会实现一些令人惊讶的效果,例如自我复制、无限递归或者其他不直观的行为。...
新版神奇校车字幕srt格式 The Magic School Bus Rides Again subtitles
这跟记忆棒就是伴随着神奇电池同时产生的包含特定文件的普通记忆棒。与电池不同,这跟神奇记忆棒的内容丢失相对来说比较容易,只要格式一下记忆棒,神奇记忆棒就会被打回原形,成为普通的记忆棒。 面对那全是字符的...
和最初的 Schaff 趋势循环指标不同,这个版本使用了 TEMA MACD 来进行计算,这使它可以“更快”判断趋势的改变 (即使与 DEMA 版本相比),而能够提前几个柱生成信号。
神奇计算器1.4是一款专为用户打造的高效实用计算工具,它以其丰富的功能和便捷的操作体验赢得了用户的喜爱。这款计算器不仅包含了基础的加减乘除运算,还拓展了许多高级功能,满足了用户在日常生活和工作中对计算的...
7. 实际应用:圆锥曲线在天文学(如行星轨道)、光学(如反射和折射)、物理学(如波动理论)等领域都有应用。在工程学中,例如建筑设计和桥梁设计,也会用到圆锥曲线的优美形状。 8. 高级概念:圆锥曲线还涉及到更...
神奇的矩阵