Утечки памяти при создании анимации с использованием JavaFX-3D
Я создал 3D-приложение JavaFX(8), которое считывает данные из какого-либо файла и отображает их в некоторой сцене.
Для рендеринга объекта я использую:
graphicsContainer.getChildren().add(some3dObject);
Когда я закомментирую эту строку, для отключения рендеринга у меня вообще нет утечек памяти.
Но когда эта строка запускается, приложение потребляет все больше и больше памяти. У меня 30 кадров в секунду, и каждую секунду потребление памяти увеличивается на ~50 МБ.
Это конечно, хотя между кадрами я использую:
graphicsContainer.getChildren().clear();
3D объекты, которые я назначаю graphicsContainer
локально не сохраняются ни в одной статической / глобальной области видимости. Они спасены только как дети graphicsContainer
, который убирается на каждом кадре.
Кажется, что-то в движке JavaFX-3D не совсем очищает мою работу, хотя я удаляю каждый раз детей graphicsContainer
,
Есть идеи, как заставить движок JavaFX 3D выпускать прошлые 3D объекты и рендеринг?
1 ответ
В моем сценарии все кадры содержат одинаковый набор трехмерных объектов. Единственное, что меняется от кадра к кадру, - это местоположение и преобразования этих объектов.
Мой обходной путь состоял в том, чтобы сохранить в каком-либо массиве каждый трехмерный объект, который я создаю (Сфера, Цилиндр и т. Д.) - затем в каждом кадре я просто меняю их расположение и преобразования, вместо того, чтобы создавать новый Group
и новые 3D-объекты каждый раз.
Память все время составляет около 220 МБ.