2016-09-19 5 views
1

Я пытаюсь создать приложение для «рисования жестов», которое в основном представляет собой слайд-шоу изображений с установленными интервалами. Я заметил, что всякий раз, когда я загружаю новое изображение, например, менее 1 МБ, использование моего приложения в памяти увеличивается более чем на 20 МБ, каждый раз при загрузке нового изображения.Ошибка загрузки памяти JavaFX?

Я пробовал два подхода, первый из них был с пользовательским «ImagePane» - для того, чтобы изменить размер изображения с помощью окна - которое загружает данное изображение в таблицу стилей (-fx-background-image), а второй использует обычный ImageView с использованием метода setImage(). В обоих случаях я заметил значительное увеличение памяти.

Теперь мой вопрос: это нормальное поведение, известная утечка памяти или я делаю что-то неправильно? Я могу предоставить весь код, если это необходимо, это просто большой прототип беспорядка на данный момент, хотя ...

+1

Вы сравниваете размер изображения * файла * с памятью, необходимой для отображения изображения? Это совершенно разные вещи. –

+0

Ну, я знаю, что они есть, но я до сих пор не могу понять, почему использование ОЗУ увеличилось бы более чем на 20 МБ каждый раз, когда загрузится изображение 2000х3000 на 800кБ. – Szernex

+0

2000x3000 = 6 миллионов пикселей. Каждый пиксель представлен 4 байтами (по одному для красного, зеленого, синего и альфа). 4 байта x 6 миллионов пикселей = 24 миллиона байт. Кажется, имеет смысл для меня. –

ответ

0

Это нормальное поведение. Когда вы загружаете новое изображение, оно будет потреблять приблизительно 4 байта на пиксель. Если вы не случайно ссылаетесь на образы, которые вы больше не используете, они будут иметь право на сбор мусора обычным способом. У вас мало контроля, когда сборщик мусора вернет память, и вы должны оставить это до JVM.

Смежные вопросы