在Java6中,对于基元和对象数组分别使用快速排序和合并排序Arrays#sort
。在Java7中,这两个都发生了变化,分别为DualPivotQuicksort和Timsort。Java 7排序“优化”
在源为新的快速排序,下面的注释出现在几个地方(如线354):
/*
* Here and below we use "a[i] = b; i++;" instead
* of "a[i++] = b;" due to performance issue.
*/
如何,这是一个性能问题?编译器不会将这些减少到相同的东西吗?
更广泛地说,自己调查这件事的好策略是什么?我可以运行基准测试,但我更愿意分析编译代码中的任何差异。但是,我不知道使用什么工具等。
无论是热点编译器做了什么错误(不太可能)或写了microbenchmark的人搞砸了......我打赌后者。 (有一些代码看起来好于另一个代码的原因有很多,比如内存页面,环境大小和什么不是) – bestsss
@bestsss当然总是可能的,但是编写这些代码(以及随后的注释)的人*知道*如何编写基准。毕竟,Java quicksort的实现已经基准化并被微调为死亡。 –
仅供参考,本课程的归属@authors是Josh Bloch,Jon Bentley(编程珍珠的作者)和Vladimir Yaroslavskiy –