2017-04-19 266 views

回答

5

因此它是~=運營商appender替換,而不是~之一。 ~總是會創建一個新副本而不會實際附​​加到現有的副本(它會使舊副本保持不變),這使得在性能問題時通常應避免使用這種低效的方便方法。

但無論如何,~=appender實際上並沒有太大的不同。關鍵的區別是~=保留其容量緩存在GC中,其中Appender攜帶它。如果你只是使用少量的陣列彼此靠近,你可能不會注意到兩者之間的差異。但是,如果你正在做很多同時有很多附加操作的數組,或者做了多線程的任何事情,那麼Appender的本地容量存儲將會給你一個很大的提升,因爲它在請求時會避免全局鎖定GC用於其容量緩存,並確保您在不同陣列之間切換時不會癱瘓全局緩存。

Appender也恰好是一個封裝的輸出範圍,因此您可以將它傳遞給某些期望該接口的函數,儘管在大多數情況下您也可以使用正則數組。因此,如果你只是追加到一個循環中的數組,那麼請繼續使用~=,並且你可能不會注意到其中的差異(事實上,我個人發現~=在這些情況下稍快一點,但是與優化構建的區別是微不足道的),但如果你存儲appender本身(而不是僅僅是最終結果)或一次做多個數組,或者編寫一個多線程程序,那麼Appender可以給你一個顯着的提升因爲它在使用全局GC緩存時避免了爭用。