Оглавление

Сборка мусора

Хотя AngelScript использует подсчет ссылок для управления памятью, существует необходимость в сборщике мусора, чтобы позаботится о тех немногих случаях, когда круговые ссылки между объектами не позволяют счетчику ссылок достигнуть нуля. Для увеличения скорости AngelScript не вызывает сборщик мусора автоматически. По этой причине важно запускать его вручную в удобное для этого время.

AngelScript обладает пошаговым сборщиком мусора, который может быть вызван в течение коротких периодов времени, не требуя прерывания работы всего приложения. Рекомендуется вызывать GarbageCollect(asGC_ONE_STEP), что позволит выполнить один шаг процесса сборки мусора.

Это может быть не достаточно для всех приложений, так как некоторые скрипты могут производить больше мусора, чем другие. Одного шага может быть не достаточно для освобождения старого мусора до генерации нового. По этой причине рекомендуется отслеживать статистику сборщика мусора и корректировать частоту вызовов по мере необходимости. Статистику можно получить с помощью функции GetGCStatistics, которая возвращает количество объектов, известных в настоящее время для сборщика мусора, а также количество объектов, которые были уничтожены, и число объектов, которые были обнаружены как мусор с круговым ссылки.

Если скрипты производят много мусора, но лишь незначительная часть мусора образуется в циклических ссылках, приложение может вызывать GarbageCollect(asGC_FULL_CYCLE | asGC_DESTROY_GARBAGE), что будет разрушать только известный мусор, не пытаясь обнаружить циклические ссылки. Этот вызов является относительно быстрым, так как сборщик мусора совершает только тривиальные местные проверки, чтобы определить, является ли объектом мусором без циклических ссылок.

В заключение, если приложение переходит в состояние, в котором отзывчивость не критична, можно использовать полный цикл сборки мусора для очистки всего мусора сразу. Для этого вызовите GarbageCollect(asGC_FULL_CYCLE).

Рекомендуется:
Управление памятью

Перевод - arroy.one@gmail.com. При копировании материалов указывайте ссылку на источник.