Ситуация:
- Сбой нашего приложения, поскольку с исключением OutOfMemory
- Приложение состоит из главного окна с TableView
- В течение рабочего дня добавлено несколько тысяч строк
- Это окно не закрыто в течение всего рабочего дня
Что мы знаем:
Анализируя дамп кучи, вы видите, что VirtualFlow (часть TableView) использует много памяти:
Использование памяти VirtualFlow
подробности
VirtualFlow имеет внутренний массив с именем privateCells. При чтении исходного кода кажется, что этот массив никогда не очищается (например, всегда содержит ссылку на TableRow's).
TableRow может использовать сотни КБ памяти (в зависимости от количества столбцов). Поэтому в целом это может привести к использованию большого количества памяти.
Что я думаю, что происходит
Я предполагаю, что только видимые TableRows (возможно, за исключением нескольких дополнительных строк для улучшения скорости прокрутки) фактически используют память.
Вопросы:
Кто-нибудь еще видел подобное поведение?
Как решить эту проблему?
- Это ошибка в платформе JavaFX или ошибка при использовании TableView?
Депс: