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

时间:2013-06-26 15:19:48

标签: java performance sorting bioinformatics

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

如果我评论Arrays.sort函数,在其他计算之前,计算时间大约是1或2毫秒,而取消注释它会增加到5或6毫秒。

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:0)

你能告诉我们你在做什么吗?实际上这只是普通数组,访问元素是CONST时间。

让我们看看下面的场景。让我们来看看你的未分类订单。你在元素'i',你正在搜索'for loop'一些其他元素。如果此元素位于索引'i + 1',则只需1步。现在让我们看看排序列表。你正在寻找的相同元素不会在i + 1,而是在其他地方,这将减慢计算速度。我想说这只是GUESS因为我不知道代码。这完全取决于你在计算中究竟做了什么。