【发布时间】:2012-11-13 11:48:25
【问题描述】:
我正在写很多东西来登录突发,并优化数据路径。我使用StringBuilder 构建日志文本。什么是最有效的初始容量,明智的内存管理,所以不管JVM如何它都能很好地工作?目标是几乎总是避免重新分配,这应该由大约 80-100 的初始容量覆盖。但我也希望尽可能少地浪费字节,因为 StringBuilder 实例可能会在缓冲区中徘徊并且浪费的字节会突然出现。
我意识到这取决于 JVM,但应该有一些价值,这将浪费最少的字节,不管 JVM,有点“最小公分母”。我目前正在使用128-16,其中 128 是一个不错的整数,减法用于分配开销。此外,这可能被认为是“过早优化”的情况,但由于我所追求的答案是“经验法则”数字,因此知道它将来也会有用。
我不期待“我最好的猜测”答案(我自己上面的答案已经是那个),我希望有人已经对此进行了研究并可以分享基于知识的答案。
【问题讨论】:
-
这个问题的答案取决于很多事情,例如您在
StringBuilder中存储的文本多长时间等。找出答案的唯一方法是使用内存和/或 CPU 分析器。除非您创建数十万个StringBuilder对象,否则没有理由担心几个字节。 -
目前最大的开销是 IO 成本。除非您不打算将这些数据写入 IO,否则我不会担心。
标签: java memory stringbuilder