私はここのStringBuilder2500と3000時より速いで、テストの数ではなく、方法を変更しました!
class Trial {
StringBuilder _member = new StringBuilder(243840);
void method1() {
for (int i = 0; i < 30480; i++) {
_member.append("test");
}
}
void method2() {
final StringBuilder temp = new StringBuilder(243840);
for (int i = 0; i < 30480; i++) {
temp.append("test");
}
_member = temp;
}
public static void main(final String args[]) {
long startTime1 = System.nanoTime();
new Trial().method1();
long endTime1 = System.nanoTime();
long startTime2 = System.nanoTime();
new Trial().method2();
long endTime2 = System.nanoTime();
System.out.println(endTime1 - startTime1);
System.out.println(endTime2 - startTime2);
System.out.println("------------------");
startTime1 = System.nanoTime();
new Trial().method1();
endTime1 = System.nanoTime();
startTime2 = System.nanoTime();
new Trial().method2();
endTime2 = System.nanoTime();
System.out.println(endTime1 - startTime1);
System.out.println(endTime2 - startTime2);
}
}
出力:
method1 then method2 with += in MILLIisecond
5563
5844
............................................
5437
6344
method2 then method1 with += in MILLIisecond
4625
5969
------------------
6531
4891
=====================================================
method1 then method2 with StringBuilder in NANOsecond
3530337
2074286
------------------
2058641
1983493
.....................................................
method2 then method1 with StringBuilder in NANOsecond
3430883
1698819
------------------
2065626
2144406
@Andreasはそれが性能をテストする良い方法はないと述べたように。指摘する
シング:宣言されたサイズ(ジョシュア・ブロックの著書効果的なJavaの項目51で:文字列連結のパフォーマンスを注意してください)とのStringBuilderを使用
からは(法2を好む)ことが可能に:文字列[ビルダー]はその中に埋め込まれていて、外では使用しません
テストを何回実行しましたか? 2つの変種をループで何度も試してみましたか?あなたはあなたの呼び出しの順序を逆転しようとしましたか? –
[jmh](http://openjdk.java.net/projects/code-tools/jmh/)を使用してベンチマークを実装しようとします。これはjvm開発者が設計した特別なツールです。独自のベンチマークではなく、このツールを使用して多くの間違いを避けることができます。 –
私は10回試して、2番目は常により速く実行されます。 – simaremare