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