Утечки памяти при создании анимации с использованием 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 МБ.

Другие вопросы по тегам