Установить ограничение времени GC / Удалить распределение в событиях

1

Есть ли способ установить лимит времени на GC?

Я спрашиваю, потому что я пишу игру, которая выделяет некоторые поплавки, ints и longs для каждого события, и я бы скорее позвонил GC в течение короткого периода времени (5-20 мс), чтобы удалить их. Затем я бы назвал GC в каждой игровой петле. Этот путь был бы моим личным фаворитом, так как у меня все еще есть некоторые ассигнования, которые я не могу выполнить без особых усилий (я уже удалил большинство вещей).

В качестве альтернативы я бы поискал другие распределения и каким-то образом их предотвратил, но тогда мне нужно было бы предотвратить помехи в событиях.

Здесь результат отслежения выделения, если необходимо: http://textsave.de/?p=67220

EDIT: я не могу ничего найти с помощью трекера выделения, все объекты из какого-то далекого Java-класса (даже в трассировке). Кроме того, показанные объекты нигде не близки к собираемым числам (если сборщик мусора не считает float [] как несколько объектов).

У кого-нибудь есть эта проблема?

Теги:
garbage-collection
events

1 ответ

1
Лучший ответ

Есть ли способ установить лимит времени на GC?

Нет, но это уже довольно коротко.

Я спрашиваю, потому что я пишу игру, которая выделяет некоторые поплавки, ints и longs на каждое событие

Не делай этого. Предварительно выделите свою память.

и я бы скорее позвонил в GC на короткий промежуток времени (5-20 мс), чтобы удалить их. Затем я бы назвал GC в каждой игровой петле

Вы можете позвонить в System.gc(), но вы не можете контролировать продолжительность его запуска. Обычно это порядка нескольких десятков миллисекунд. Тем не менее, вам лучше обслуживать, избегая выделения в первую очередь, поддерживая свой собственный пул объектов.

  • 0
    Как мне это сделать? Предварительно выделить память для объекта, который создан в коде, который я не могу редактировать? Я посмотрел на Google, но я должен искать неправильно.
  • 0
    @SBoss: «Предварительно выделить память для объекта, который создан в коде, который я не могу редактировать?» - затем предварительно выделите сам объект, если можете. Или не используйте этот код в игре. Практики программирования, которые подходят для обычных приложений Android, не обязательно подходят для разработки игр. Кроме того, имейте в виду, что на более новых устройствах Android сборка мусора происходит параллельно в фоновом потоке, поэтому для него нет пауз «остановка мира».
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню