2017-03-23 66 views
1

給予代碼:Java:String.replace GC開銷太多了嗎?

long i=0; 
while(i++<MILLIONS){ 
    String justHex = UUID.randomUUID().toString().replaceAll("-",""); 
    System.out.println(justHex); 
} 

這將產生大量的唯一的字符串,其中Gc將不得不最終清洗的。並且,enter code here在每個字符串上執行replaceAll會創建更多的唯一字符串(兩次?)。

這是否(replaceAll)對於小型應用程序來說是GC的一項重要開銷?

程序員應該擔心這樣的事情嗎?

回答

1

這些字符串是臨時字符串,在下一次迭代中不會再被引用,所以我期望它們能夠快速被垃圾收集。除非基準測試表明循環是性能瓶頸,否則不要過多擔心並關注功能的正確性。

對內存使用情況和性能的影響更大的事實是,您使用的是replaceAll,它預計正則表達式爲作爲第一個參數。如果您不需要正則表達式,最好使用replace,它也可以替換所有出現的元素,但不具有正則表達式開銷。

+0

實際上,替換也會進行正則表達式替換(replace invokes replaceAll),但首先會轉義字符串中的所有特殊字符。如果你想獲得最好的性能,你應該看看Apache或谷歌的第三方庫(替代品來源:'返回Pattern.compile(target.toString(),Pattern.LITERAL).matcher(this).replaceAll Matcher.quoteReplacement(replacement.toString()));' –