Подтвердить что ты не робот

Выделения в новых TLAB и распределениях вне TLAB

Средство управления миссиями Java в JDK предоставляет статистику распределения объектов в новых TLAB и распределениях вне TLAB. (Это под памятью/распределением). Каково значение этих статистических данных, что хорошо для производительности приложения? Должен ли я беспокоиться, если некоторые объекты выделены вне TLAB, и если да, что я могу сделать с ним?

4b9b3361

Ответ 1

TLAB - это локальный буфер распределения потоков. Объекты обычного пути выделяются в HotSpot в пределах TLAB. Выделение TLAB может выполняться без синхронизации с другими потоками, так как Buffer Allocation Buffer является потоковой локалью, синхронизация необходима только при получении новой TLAB.

Итак, идеальный сценарий заключается в том, что максимально возможное распределение выполняется в TLAB.

Некоторые объекты будут выделены за пределами TLAB, например больших объектов. Об этом не стоит беспокоиться, пока процент распределений вне TLAB и распределений в новых TLAB невелик.

TLAB динамически изменяются во время выполнения для каждого потока отдельно. Таким образом, если поток выделяет очень много, новые TLAB, которые он получает из кучи, будут увеличиваться в размере. Если вы хотите, вы можете попытаться установить флаг -XX:MinTLABSize для установки минимального размера TLAB, например -XX:MinTLABSize=4k

Ответ моего коллеги Дэвида Линдхольма:)