JEP 195: Scalable Native Memory Tracking
Масштабируемый Native Memory Tracking
| Автор | Zhengyu Gu |
| Ответственный | Mary Lautman |
| Тип | Feature |
| Область | JDK |
| Статус | Closed / Delivered |
| Выпуск | 8u40 |
| Компонент | hotspot / runtime |
| Обсуждение | hotspot dash dev at openjdk dot java dot net |
| Трудоёмкость | L |
| Длительность | L |
| Рецензенты | Karen Kinnear, Mikael Vidstedt |
| Одобрен | Mikael Vidstedt |
| Создан | 2014/05/28 19:47 |
| Обновлён | 2015/02/27 13:50 |
| Задача | 8044192 |
Аннотация
Улучшить масштабируемость Native Memory Tracking.
Что не является целью
Мы не планируем добавлять новую функциональность.
Целью этой работы не является снижение потребления памяти, повышение производительности или включение отслеживания в режиме summary по умолчанию.
Критерии успеха
Native Memory Tracking можно использовать на больших системах без самоотключения и без существенного влияния на производительность сверх того, что сейчас считается приемлемым для небольших проектов.
Мотивация
Функция Native Memory Tracking предназначена для диагностики утечек памяти в VM, а также для того, чтобы пользователи могли убедиться, что утечки памяти находятся не в VM. Текущая реализация, как правило, плохо работает на больших системах, когда за короткий период выполняется большое количество вызовов malloc. Она не только расходует значительный объём памяти на отслеживание, но и тратит такты процессора на обработку данных отслеживания.
Описание
Этот проект направлен на устранение узких мест в текущей реализации Native Memory Tracking, особенно накладных расходов на память и процессор при отслеживании операций malloc.
Новый подход избавляется от записей отслеживания malloc: данные отслеживания размещаются вместе с памятью, выделенной через malloc. Это не только сокращает объём памяти под данные отслеживания, но и избавляет от обработки исходных данных отслеживания. Для отслеживания мест выделения malloc используется неблокирующая (lock-free) хеш-таблица; эта структура данных дополнительно снижает накладные расходы памяти при детальном отслеживании malloc и время выполнения запросов. Она также позволяет избежать блокирующих вызовов на обычных путях выполнения JVM при отслеживании операций malloc, что также должно снизить влияние на производительность JVM.
Новая реализация размещает заголовок отслеживания malloc вместе с пользовательскими данными и гарантирует, что пользовательские данные выровнены по границе выравнивания malloc в продуктовой сборке (8 байт на 32-битных системах и 16 байт на 64-битных системах), а в отладочной сборке — по границе 8 байт.
Тестирование
Существующие тесты Native Memory Tracking должны покрывать базовые/функциональные тесты. Могут потребоваться новые тесты масштабируемости.