我已經讀過,如果我經常分配字符串,我應該使用Appender,但是Appender
的原理與~
運算符有什麼不同?Appender和〜有什麼區別?
它們的兩個(afaik)都是用於存儲器分配的use GC。那麼區別是什麼呢?哪一個更好呢?
我已經讀過,如果我經常分配字符串,我應該使用Appender,但是Appender
的原理與~
運算符有什麼不同?Appender和〜有什麼區別?
它們的兩個(afaik)都是用於存儲器分配的use GC。那麼區別是什麼呢?哪一個更好呢?
因此它是~=
運營商appender
替換,而不是~
之一。 ~
總是會創建一個新副本而不會實際附加到現有的副本(它會使舊副本保持不變),這使得在性能問題時通常應避免使用這種低效的方便方法。
但無論如何,~=
和appender
實際上並沒有太大的不同。關鍵的區別是~=
保留其容量緩存在GC中,其中Appender
攜帶它。如果你只是使用少量的陣列彼此靠近,你可能不會注意到兩者之間的差異。但是,如果你正在做很多同時有很多附加操作的數組,或者做了多線程的任何事情,那麼Appender的本地容量存儲將會給你一個很大的提升,因爲它在請求時會避免全局鎖定GC用於其容量緩存,並確保您在不同陣列之間切換時不會癱瘓全局緩存。
Appender
也恰好是一個封裝的輸出範圍,因此您可以將它傳遞給某些期望該接口的函數,儘管在大多數情況下您也可以使用正則數組。因此,如果你只是追加到一個循環中的數組,那麼請繼續使用~=
,並且你可能不會注意到其中的差異(事實上,我個人發現~=
在這些情況下稍快一點,但是與優化構建的區別是微不足道的),但如果你存儲appender本身(而不是僅僅是最終結果)或一次做多個數組,或者編寫一個多線程程序,那麼Appender
可以給你一個顯着的提升因爲它在使用全局GC緩存時避免了爭用。