Почему использование пустой памяти в libGDX-App постоянно растет? - PullRequest
3 голосов
/ 02 мая 2019

гуру там,

Я относительно новичок в libGDX (и в целом в Java-программировании) и у меня есть вопрос, касающийся использования приложений libGDX в оперативной памяти, но я не смог найти ответ для онлайн. Несколько дней назад, когда я настраивал пример игры из книги «Разработка Java-игр с LibGDX», которую я сейчас читаю, я заметил, что использование этой игрой оперативной памяти резко возрастало, когда ее оставляли в покое примерно на 1 час. Мой Linux-монитор ресурсов начался с ~ 120 МБ и до того времени, когда я его закрыл, достигал 1300 МБ. Я уже связывался с автором по этому вопросу, так как я проходил мимо его книги построчно и все еще получал такое поведение!

Помимо возможных утечек в его примерах, я решил копнуть глубже и создал пустое LibGDX-приложение, используя самый последний gdx-setup.jar (v. 1.9.9), и решил некоторое время запустить его. Я протестировал это на своей рабочей станции, используя Ryzen 2700X, 32 ГБ оперативной памяти и Linux Mint 19.1. Интересно, что пустое приложение показало похожее, но не столь радикальное поведение, когда объем используемой оперативной памяти продолжал расти с ~ 50 МБ до ~ 260 МБ к моменту выключения, даже без единого отказа! Я читал в Интернете, что мониторы ресурсов на самом деле не отображают то, что потребляет работающая игра внутри java-процесса, но смешивают некоторые JVM-вещи. Поэтому я решил провести дальнейший анализ с помощью jConsole и VisualVW. Я подозревал ленивый GC, но оба инструмента показали, что GC периодически запускался. Тем не менее, монитор ресурсов моей ОС показывал это непрерывно растущее использование оперативной памяти в пустом приложении LibGdx, хотя он ничего не делал, кроме того, что смотрел мне в лицо, раздражая Bad Logic-Smiley на красном фоне; -).

Я уже провел интенсивный поиск по форуму и переполнению стека на тему утечек памяти и использования оперативной памяти в LibGDX, но не смог найти удовлетворительного ответа. Поэтому мне интересно, вызывает ли это поведение беспокойство или это нормально? Если это так, и даже пустое приложение постоянно увеличивает объем используемой оперативной памяти, как можно определить, все ли в порядке или утечка памяти в приложении? Я был бы очень признателен, если бы некоторые из вас, LibGDX-гуру, поделились вашей мудростью в этой теме с таким нубом, как я: -)

Спасибо заранее - codeArist

1 Ответ

0 голосов
/ 03 мая 2019

Я не эксперт по вопросам управления памятью и не мудрый гуру, но у меня есть просто простая игра на libGDX.Я разработал его, используя следующую стратегию, которую я использую с тех пор, как начал реализовывать свою первую программу более 25 лет назад: всегда проводите тестирование на низком оборудовании.Если все идет гладко, то все хорошо.Моя игра libGDX отлично работает на младших устройствах Android с 2011 года, версия для iOS хорошо работает на iPhone с 2013 года. На современных мобильных устройствах среднего класса версия Android почти никогда не убивается для экономии памяти.Хотя я играю в свою игру около 10 раз в день, и это выходит на передний план для этого, очевидно, процесс не достаточно требователен к памяти для Android, чтобы решить, что он закрывается.Рецензенты в магазине Play Store хвалят игру за гладкую работу на недорогих устройствах.

Итак, мой ответ для вас: нет никаких проблем с libGDX, возможно, вы просто наблюдаете некоторое поведение JVM в вашей системе.Напишите свою игру, протестируйте ее на недорогом устройстве - используйте старую Galaxy S3 или Moto G, или, если вы планируете просто выпустить для настольных ПК, используйте свой старый бизнес-ноутбук 2011 года для тестирования.Если все работает хорошо, не пытайтесь отследить или исправить несуществующую проблему.

И, кстати, вы можете присоединиться к разногласиям libGDX, которые связаны на странице Github.Это подходящее место для таких обсуждений, и у нас есть несколько парней, которые действительно изучали поведение памяти раньше.

...