一尘不染

Java 7排序“优化”

java

在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.
  */

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

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


阅读 209

收藏
2020-12-03

共1个答案

一尘不染

这只是一般问题的答案。

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

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

如果使用的是Eclipse,你也可以尝试这一个

2020-12-03