Повышение производительности Java Hotspot VM: компактные строки

Функция компактных строк вводит внутреннее представление строк с эффективным использованием пространства.

Данные из разных приложений показывают, что строки являются основным компонентом использования кучи Java и что большинство объектов java.lang.String содержат только символы Latin-1. Такие символы требуют только одного байта памяти. В результате половина пространства во внутренних символьных массивах объектов java.lang.String не используется. Функция компактных строк, представленная в Java SE 9, сокращает объем занимаемой памяти и снижает активность по сбору мусора. Эта функция может быть отключена, если вы наблюдаете проблемы снижения производительности в приложении.

Функция компактных строк не представляет новых общедоступных API или интерфейсов. Она изменяет внутреннее представление класса java.lang.String из массива символов UTF-16 (два байта) в байтовый массив с дополнительным полем для идентификации кодировки символов. Другие связанные со строками классы, такие как AbstractStringBuilder, StringBuilder и StringBuffer, обновляются для использования аналогичного внутреннего представления.

В Java SE 9 функция компактных строк включена по умолчанию. Поэтому класс java.lang.String хранит символы в виде одного байта для каждого символа, закодированного как Latin-1. Дополнительное поле кодировки символов указывает используемую кодировку. Встроенные функции HotSpot VM обновляются и оптимизируются для поддержки внутреннего представления.

Вы можете отключить функцию компактных строк, используя флаг -XX:-CompactStrings в командной строке java. Когда функция отключена, класс java.lang.String хранит символы в виде двух байтов, закодированных как UTF-16, и встроенных в строку HotSpot VM для использования кодировки UTF-16.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки