Appender和〜有什么区别?
问题描述:
我已经读过,如果我经常分配字符串,我应该使用Appender,但是Appender
的原理与~
运算符有什么不同?Appender和〜有什么区别?
它们的两个(afaik)都是用于存储器分配的use GC。那么区别是什么呢?哪一个更好呢?
答
因此它是~=
运营商appender
替换,而不是~
之一。 ~
总是会创建一个新副本而不会实际附加到现有的副本(它会使旧副本保持不变),这使得在性能问题时通常应避免使用这种低效的方便方法。
但无论如何,~=
和appender
实际上并没有太大的不同。关键的区别是~=
保留其容量缓存在GC中,其中Appender
携带它。如果你只是使用少量的阵列彼此靠近,你可能不会注意到两者之间的差异。但是,如果你正在做很多同时有很多附加操作的数组,或者做了多线程的任何事情,那么Appender的本地容量存储将会给你一个很大的提升,因为它在请求时会避免全局锁定GC用于其容量缓存,并确保您在不同阵列之间切换时不会瘫痪全局缓存。
Appender
也恰好是一个封装的输出范围,因此您可以将它传递给某些期望该接口的函数,尽管在大多数情况下您也可以使用正则数组。因此,如果你只是追加到一个循环中的数组,那么请继续使用~=
,并且你可能不会注意到其中的差异(事实上,我个人发现~=
在这些情况下稍快一点,但是与优化构建的区别是微不足道的),但如果你存储appender本身(而不是仅仅是最终结果)或一次做多个数组,或者编写一个多线程程序,那么Appender
可以给你一个显着的提升因为它在使用全局GC缓存时避免了争用。