2016-08-31 7 views
0

Я построил 3D-приложение JavaFX (8), которое считывает данные из некоторого файла и отображает его на какой-либо сцене.Утечка памяти при создании анимаций с использованием JavaFX-3D

Для визуализации объекта, я использую:

graphicsContainer.getChildren().add(some3dObject); 

Когда я закомментировать эту строку, для отключения рендеринга, у меня нет никаких утечек памяти вообще.

Но когда эта строка запускается, приложение потребляет все больше и больше памяти. У меня 30 кадров в секунду, и каждую секунду потребление памяти увеличивается в ~ 50 МБ.

Это, конечно, хотя между кадрами я использую:

graphicsContainer.getChildren().clear(); 

3D-объекты Поручаю к graphicsContainer локальны не сохраняются в любом статическом/глобальном масштабе. Они сохраняются только как дети graphicsContainer, которые очищаются на каждом кадре.

Кажется, что-то в движке JavaFX-3D действительно не очищает мою работу, хотя я удаляю каждый раз, когда дети graphicsContainer.

Любая идея, как заставить JavaFX 3D-движок выпускать последние 3D-объекты и визуализации?

+0

Каковы ваши фактические данные о утечке памяти? В конечном итоге у него заканчивается память? Откуда вы знаете, что сборщик мусора просто не решил, что ему нужно вернуть неиспользуемую память (пока)? –

+0

Вы используете это в Linux? JavaFX имеет некоторые проблемы с утечкой памяти в Linux с некоторыми конфигурациями (технически утечка, вероятно, находится в Mesa, а не Java, но JavaFX - это единственное место, с которым я столкнулся) – Itai

+0

Это на Windows – SomethingSomething

ответ

0

В моем сценарии все кадры содержат один и тот же набор трехмерных объектов. Единственное, что меняется от кадра к кадру, это расположение и преобразования этих объектов.

Мое обходное решение состояло в том, чтобы сохранить в каком-либо массиве каждый созданный трехмерный объект (Сфера, Цилиндр и т. Д.) - тогда на каждом кадре я просто изменяю свое местоположение и преобразования, вместо того, чтобы создавать новые Group и новые 3D-объекты каждый раз ,

Память теперь составляет около 220 МБ.

+1

Предполагается, что используется граф сцены. Постоянное повторное создание всего графического материала не является хорошей идеей, потому что API-интерфейс графика сцены не является API-интерфейсом немедленного рендеринга. – mipa