Java Arrays.sort()会影响程序中其他方法的性能; 为什么?

Nad*_*dir 0 java sorting performance bioinformatics

我正在开发一个java程序,其中我正在使用一大类Class实例.我必须为数组的每个对象进行一些计算(使用它的Class方法).当我使用Arrays.Sort或其他方法对数组进行排序时,我注意到计算时间的增加以执行我的计算,即排除进行排序的时间!

如果我对Arrays.sort函数进行注释,则在其他计算之前,计算时间约为1或2毫秒,而取消注释则增加到5或6毫秒.

我必须为大量的步骤(甚至300,000)做这项工作,所以增量会改变很多我的表现.

对这种奇怪的行为有什么解释吗?

Chr*_*est 5

这是我最好的猜测,因为我对代码知之甚少:

对象通常(尽管不总是)按照分配顺序放置在堆上.GC会移动它们,但有可能大致保留订单.

然后,当您轮流访问每个数据以对其数据进行计算时,您最终可能会获得大致线性的内存访问.或者更重要的是,内存访问在某种程度上是可预测的.这使您的CPU缓存和内存子系统更高效.

如果没有按排序顺序分配对象,然后对它们进行排序,则可以将这种可预测的内存访问转换为不可预测的随机访问,这种速度较慢.