在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。