Размер StringBuffer / StringBuilder в Java - PullRequest
4 голосов
/ 16 августа 2011

Все,

Почему предлагается, чтобы размер объекта StringBuffer / StringBuilder был инициализирован до размера 2 ^ {1 ... n} (хотя обычно это> 64).Какое преимущество / оптимизация будет достигнуто при этом?

Ответы [ 2 ]

7 голосов
/ 16 августа 2011

Это связано с тем, что по умолчанию конструктор инициализирует его размером , равным 16 , и всякий раз, когда эта емкость будет превышена, он будет удваиваться и создаст новый.

Поэтому, если вы точно знаете, что будете использовать более 16 пробелов, вам следует инициализировать его более высоким значением.

3 голосов
/ 16 августа 2011

Какое было бы преимущество / оптимизация при этом?

Я не думаю, что в этом есть какое-то преимущество.

МойСовет будет выбрать начальный размер, который немного больше, чем ожидаемый размер ... если у вас есть умеренно хорошая оценка.Если у вас нет оценки, вы не получите много, указав начальный размер.

Использование начального размера, который является значительным переоценкой, не является хорошей идеей.Это тратит впустую пространство, и JVM придется обнулять все те символы, которые вы не используете в какой-то момент, что стоит циклов ЦП / памяти.

[Должно быть возможным эмпирически определить стоимость занижения и завышения размеров и сравнить со стоимостью использования начального размера по умолчанию.Однако цифры, скорее всего, будут зависеть от того, насколько хорош оптимизатор JIT, и от того, насколько быстро можно скопировать память, а также от того, насколько быстро ее можно обнулить.Другими словами, они будут зависеть от платформы.]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...