Я пишу много вещей, чтобы регистрировать всплески и оптимизировать путь данных. Я строю текст журнала с помощью StringBuilder
. Какова будет наиболее эффективная начальная емкость с точки зрения управления памятью, чтобы она хорошо работала независимо от JVM? Цель состоит в том, чтобы почти всегда избегать перераспределения, которое должно быть покрыто начальной емкостью около 80-100. Но я также хочу потерять как можно меньше байтов, поскольку экземпляр StringBuilder может зависать в буфере, и появляются потерянные байты.
Я понимаю, что это зависит от JVM, но должно быть какое-то значение, которое будет тратить наименьшее количество байтов, независимо от JVM, своего рода «наименьший общий знаменатель». В настоящее время я использую 128-16
, где 128 — хорошее круглое число, а вычитание используется для накладных расходов. Кроме того, это можно рассматривать как случай «преждевременной оптимизации», но, поскольку ответ, который мне нужен, представляет собой «эмпирическое правило», знание этого будет полезно и в будущем.
Я не ожидаю ответов «наилучшее предположение» (мой собственный ответ выше уже такой), я надеюсь, что кто-то уже исследовал это и может поделиться ответом, основанным на знаниях.
StringBuilder
и т. д. Единственный способ узнать это — измерить с помощью профилировщика памяти и/или процессора. Нет причин беспокоиться о нескольких байтах, если только вы не создаете сотни тысячStringBuilder
объектов. - person Jesper   schedule 13.11.2012