Есть ли способ установить лимит времени на GC?
Я спрашиваю, потому что я пишу игру, которая выделяет некоторые поплавки, ints и longs для каждого события, и я бы скорее позвонил GC в течение короткого периода времени (5-20 мс), чтобы удалить их. Затем я бы назвал GC в каждой игровой петле. Этот путь был бы моим личным фаворитом, так как у меня все еще есть некоторые ассигнования, которые я не могу выполнить без особых усилий (я уже удалил большинство вещей).
В качестве альтернативы я бы поискал другие распределения и каким-то образом их предотвратил, но тогда мне нужно было бы предотвратить помехи в событиях.
Здесь результат отслежения выделения, если необходимо: http://textsave.de/?p=67220
EDIT: я не могу ничего найти с помощью трекера выделения, все объекты из какого-то далекого Java-класса (даже в трассировке). Кроме того, показанные объекты нигде не близки к собираемым числам (если сборщик мусора не считает float [] как несколько объектов).
У кого-нибудь есть эта проблема?
Есть ли способ установить лимит времени на GC?
Нет, но это уже довольно коротко.
Я спрашиваю, потому что я пишу игру, которая выделяет некоторые поплавки, ints и longs на каждое событие
Не делай этого. Предварительно выделите свою память.
и я бы скорее позвонил в GC на короткий промежуток времени (5-20 мс), чтобы удалить их. Затем я бы назвал GC в каждой игровой петле
Вы можете позвонить в System.gc()
, но вы не можете контролировать продолжительность его запуска. Обычно это порядка нескольких десятков миллисекунд. Тем не менее, вам лучше обслуживать, избегая выделения в первую очередь, поддерживая свой собственный пул объектов.