Аналитические desktop-приложения
Устранение out-of-memory в JavaFX-графиках
Нашёл через profiler причину исчерпания памяти на графике примерно из 8 000 точек. Заменил отдельный Tooltip для каждой точки одним переиспользуемым popup.
Задача
График примерно на 8 000 точек мог исчерпать память: приложение заранее создавало отдельный Tooltip для каждой точки.
Моя ответственность
Диагностировал причину потребления памяти и реализовал переиспользуемую интерактивную подсказку.
Результат
Тот же график открывается без out-of-memory. Одна интерактивная подсказка переиспользуется для всех точек.
точек на графике, который после исправления открывался без out-of-memory
переиспользуемая подсказка вместо отдельной для каждой точки
Диагностика потребления памяти
Profiler показал тысячи tooltip/popup-объектов и связанные элементы JavaFX window/scene graph. Именно их количество создавало основной объём потребления памяти.
Это особенность реализации приложения: библиотека графиков не требует отдельного popup-окна для каждой точки.
Переиспользуемая подсказка
Заменил отдельные Tooltip одним переиспользуемым popup. При взаимодействии с графиком обновляются его содержимое и положение для текущей точки.
Результат
Количество тяжёлых popup-объектов перестало расти вместе с числом точек, а интерактивная подсказка осталась доступной. Тот же график примерно на 8 000 точек после исправления открывался без out-of-memory.
Сокращение памяти в мегабайтах или процентах не заявляется.