Java6では、プリミティブ配列とオブジェクト配列のそれぞれについて、quicksortとmergesortの両方が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.
*/
方法は、これがパフォーマンスの問題でしょうか?コンパイラはこれらを同じものに減らしませんか?
もっと広義には、これを自分自身で調べるための良い戦略は何ですか?ベンチマークを実行できますが、コンパイルされたコードの違いを分析することにもっと興味があります。しかし、私はどのツールを使うべきかわかりません。
ホットスポットコンパイラが何か間違った(おそらく)か、マイクロベンチマークを書いた人がそれをねじ込んでいます...そして、私は後者を賭けました。 (いくつかのコードがメモリページや環境サイズなどのように他のコードより優れているように見える小さな理由はたくさんあります) – bestsss
@bestsssもちろんこのコードを書いた人たちベンチマークの書き方結局のところ、Javaクィックソートの実装はベンチマークされ、細かく調整されています。 –
FYI、このクラスの帰属する著者は、Josh Bloch、Jon Bentley(Programming Pearlsの著者)、Vladimir Yaroslavskiy –