最適化について読んだとき、私はループの展開についての話題を取り上げました。 Googleで小さな検索をすることで、Javaのコンパイラがこれを行うかどうかはわかりませんでした。Javaのパフォーマンス - ループの展開
したがって、私の自己によって試してみるのが最善の方法でした。
実際、このループを展開することで実際には私はかなり驚いていました。私はそれをスピードアップすることができました。
public static void folded() {
System.out.println("Folded:");
long c1 = System.currentTimeMillis();
for (int r = 0; r < 10; r++) {
for (int i = 0; i < 500000; i++) {
Math.sin(i);
}
}
System.out.println(System.currentTimeMillis() - c1);
}
public static void unFolded() {
System.out.println("Unfolded:");
long c1 = System.currentTimeMillis();
for (int r = 0; r < 10; r++) {
for (int i = 0; i < 500000; i += 10) {
Math.sin(i);
Math.sin(i + 1);
Math.sin(i + 2);
Math.sin(i + 3);
Math.sin(i + 4);
Math.sin(i + 5);
Math.sin(i + 6);
Math.sin(i + 7);
Math.sin(i + 8);
Math.sin(i + 9);
}
}
System.out.println(System.currentTimeMillis() - c1);
}
結果(COUNTER 500'000):つ折り
:453
非折り畳み:114
結果(COUNTER 5'000'000):つ折り
:13850
アンフォールディング:11929
私は何を信頼すべきですか?手動最適化またはコンパイラ?このテストでは、私の結果は、手動による最適化がより良いと思われることを示しています。
http://codereview.stackexchange.com/ – Freiheit
に掲載されているコード最適化に関する質問であるため、このトピックをオフトピックとして閉じるよう投票しています。この種のテストを本当にしたいのであれば'javap'を介して指示を調べる –
http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-javaを読むことを検討してください。 – bradimus