我也犯了同樣的測試,因爲它是在這個崗位做: new String() vs literal string performanceJava的String =「」與新的String(「」)的性能變化
含義我想考哪一個具有在性能越好。正如我預期的結果是文字的分配速度更快。我不知道爲什麼,但是我做了一些更多任務的測試,並且我發現了一些奇怪的東西:當我讓程序執行超過10.000次的循環時,文字賦值的速度相對不會比低於10.000賦值的速度快。在重複1000,000次時,它甚至比創建新對象要慢。
這裏是我的代碼:
double tx = System.nanoTime();
for (int i = 0; i<1; i++){
String s = "test";
}
double ty = System.nanoTime();
double ta = System.nanoTime();
for (int i = 0; i<1; i++){
String s = new String("test");
}
double tb = System.nanoTime();
System.out.println((ty-tx));
System.out.println((tb-ta));
我讓這個運行像它上面寫的。我剛剛學習Java,老闆讓我做測試,在我提交測試結果後,他問我找到答案,爲什麼會發生這種情況。我找不到任何在谷歌或在計算器上的東西,所以我希望有人能幫助我在這裏。
factor at 1 repetition 3,811565221
factor at 10 repetitions 4,393570401
factor at 100 repetitions 5,234779103
factor at 1,000 repetitions 7,909884116
factor at 10,000 repetitions 9,395538811
factor at 100,000 repetitions 2,355514697
factor at 1,000,000 repetitions 0,734826755
謝謝!
我強烈懷疑你只是看到熱點隨着時間的推移而更加優化。 「百萬次重複」部分可能顯示了其他一些因素......它真的*不會更快。 –
查找Hotspot並記住垃圾收集,以回答爲什麼你看到與大量執行的區別。對於Java中的未來任務,請儘快忘掉這種優化級別。正如卡亞曼所說 - 擔心這是浪費時間。測量有意義的算法,但不要讓這個結果影響你編寫任何代碼的方式! –