在Java6中,quicksort和mergesort都分别在Arrays#sort中用于原始数组和对象数组。在Java7中,它们都已更改为DualPivotQuicksort和Timsort。

在新的快速排序的来源中,以下注释出现在几个地方(例如354行):

 /*
  * Here and below we use "a[i] = b; i++;" instead
  * of "a[i++] = b;" due to performance issue.
  */

这是一个性能问题吗?编译器不会将这些简化为同一件事吗?

更广泛地说,调查自己的最佳策略是什么?我可以运行基准测试,但是对分析已编译代码中的任何差异会更感兴趣。但是,我不知道要使用什么工具等。

最佳答案

这只是对一般问题的解答。

您可以查看字节码并尝试了解它们之间的差异。即您可以使用a[i] = b; i++;a[i++] = b;编写一个简单的示例,看看有什么区别。

显示字节码的最简单方法是javap程序(应该包含在JDK中)。使用javac SomeFile.java编译代码并在以下代码上运行javap:javap -c SomeFile(-c开关告诉javap输出文件中每个方法的字节码)。

如果您使用的是eclipse,也可以尝试this one

10-06 05:47