Я создаю Android-игру с OpenGLES 2.0, и моя игра в настоящее время может отображать до 55-60 кадров в секунду, но у меня есть небольшая проблема с Garbage Collector, она замедляется до 35 кадров в секунду , и вы можете увидеть задержку, которая повредит пользователю. Он работает в совершенно случайных моментах.
Мой вопрос:
Можно ли каким-то образом контролировать исполнение сборщика мусора, например, я могу задержать GC для 0,5с или позвоните по телефону GC до и быть уверенным, что GC не будет называться в ближайшие два секунду? Или есть ли способ уменьшить влияние GC на выполнение приложения?Java-сборщик мусора
ответ
Вы не можете влиять на GC слишком многими способами. Он будет работать, когда ему придется (и когда он решит, что он хочет).
Вы можете попытаться свести к минимуму сумму, которую он должен собрать, уменьшив созданные объекты, избегая их создания или повторно используя старые.
В принципе, вы не можете остановить GC, но вы можете заставить вызова с помощью System.gc()
попробовать these шаги, чтобы избежать таких проблем с GC
сборщик мусора начинается, когда он должен освободить память от неиспользуемых объекты.
Лучший способ работы - уменьшить количество новых объектов, повторно использующих старые.
Прочтите свой код, и каждый раз, когда вы видите ключевое слово new
, спросите себя Мне действительно нужен новый объект здесь? Или я могу сбросить старый неиспользуемый объект?
Попробуйте прочитать советы в разработчиков андроида сайте http://developer.android.com/training/articles/perf-tips.html
Примечание: вызов System.gc()
это просто предложение для системы сбора мусора, который автоматически выбирать, когда работать. От Javadoc «Вызов этого метода предлагает, что виртуальная машина Java затрачивать усилия в направлении утилизации неиспользуемых объектов ...»
Означает ли это, что вызов 'System.gc()' непосредственно перед тем, как важная часть игры не хороша идея? – encrypt
Вы не уверены, что сборщик мусора вызывается, когда вы его спрашиваете. Лучший способ программирования игры - это оживить необходимость сбора мусора. Лучше всего использовать объекты повторного использования, а не создавать новые. Вызов System.gc() иногда может быть плохим выбором. –
ОК, но, пожалуйста, проверьте этот сценарий: Например, у меня есть игрок и несколько врагов на экране (я не знаю, например, 5-10 врагов), и в одно мгновение появляются новые враги и присоединяются к другим. Лучше ли создавать дополнительных врагов до начала игры (хотя они не видны на экране, OpenGL должен нарисовать их каждый кадр) или создать объект, когда мне нужно его использовать. Я знаю, что трудно сказать, что является лучшим вариантом, но я хочу знать, что является лучшей стратегией программирования? – encrypt
- 1. обнаружение мусора значение мусора
- 2. Android-сборщик мусора для мусора Полный
- 3. Сборщик мусора
- 4. Печать мусора
- 5. Сбор мусора
- 6. Сбор мусора
- 7. Сбор мусора YGCT и сбор мусора Время продолжает расти
- 8. Сбор урожая мусора Vs Сбор мусора в .NET
- 9. Обработка мусора в программе Java при производстве мусора
- 10. Целеустремленность и сбор мусора
- 11. Сократите время сбора мусора
- 12. LibGdx Сборщик мусора
- 13. java basics сбор мусора
- 14. Функция возвращает значение мусора
- 15. SSE с добавлением мусора
- 16. Перегрузка мусора, Java
- 17. Git не уборка мусора
- 18. Renderscript и сборщик мусора
- 19. JAVA мусора Коллекция
- 20. Сбор мусора/связанный список
- 21. Сбор мусора и стружки
- 22. Сборщик мусора в .NET
- 23. Эффективность сборщика мусора .NET.
- 24. Erlang сбор мусора
- 25. C# Сбор мусора?
- 26. Джанго - Attachment мусора
- 27. Сборщик мусора asp.net
- 28. javascript addEventListener - сбор мусора
- 29. Пользовательский сборщик мусора JavaScript
- 30. андроид сборщик мусора lingo
Но я могу быть уверен, что Java не будет вызывать GC после моей силы вызова (например, 2-3 s)? – encrypt
, мы не можем прийти к заключению, что это может вызвать GC немедленно или даже после 5 секунд, то есть позаботится Java –