Interested Article - Пул строк

Пул строк ( англ. string pooling ) относится к двум видам оптимизации компилятора , связанным со строками :

  1. Снижение объёма кода путём объединения одинаковых строк из разных модулей.
  2. Ленивые присваивания строк с использованием счётчика ссылок ( copy-on-write ).

Объединение строк из разных модулей

При обработке исходного кода компилятор должен каждую литеральную строку поместить в метаданные управляемого модуля. Если одна строка встречается в исходном коде много раз, размещение всех таких строк в метаданных приведет к росту результирующего файла.

Чтобы не допустить роста объёма кода, многие компиляторы (в том числе компилятор C# ) хранят литеральную строку в метаданных модуля только в одном экземпляре. Все упоминания этой строки в исходном коде компилятор заменяет ссылками на её экземпляр в метаданных. Благодаря этому заметно уменьшается размер модуля. Способ не новый — в компиляторах C / C++ этот механизм существует уже давно. В компиляторе Microsoft C/C++ это называется созданием пула строк (string pooling). Это ещё одно средство, позволяющее ускорить обработку строк.

Ленивые присваивания строк

Обычно строка — это объект большого размера, требующий для своей работы выделения большого блока памяти . Данная оптимизация выделяет память под строки только при надобности, позволяя нескольким переменным указывать на одну цепочку символов. Только если одна из переменных меняет своё содержимое, строка копируется.

Подобная оптимизация существует в языках со сборкой мусора в таком виде: строка является неизменным объектом, и присваивание a=b не создаёт новой строки. Недостаток этого решения в том, что программист должен знать и использовать внутренний механизм построения строк наподобие StringBuilder ( Java ).

Литература

  • Рихтер Дж. CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке C#. Мастер-класс.

Ссылки

  • для чего пул строк используется в Java
Источник —

Same as Пул строк