Garbage Collector (GC), или сборщик мусора, — это встроенная система автоматического управления памятью в Unreal Engine (UE4, UE5). Ее основная задача заключается в поиске объектов, которые больше не используются игрой, и освобождении занимаемой ими оперативной памяти. Благодаря этому разработчику не требуется вручную удалять большинство объектов, как это приходится делать в некоторых других языках программирования. Однако понимание принципов работы Garbage Collector крайне важно, поскольку оно помогает избежать утечек памяти, ошибок при обращении к уже удаленным объектам и других распространенных проблем.
Работа Garbage Collector основана на принципе достижимости объектов. Во время очередного прохода сборщик мусора начинает проверку с так называемых корневых объектов. Это объекты, существование которых гарантируется движком, например Game Instance, загруженные уровни, Game Mode, Player Controller, существующие Actors, их компоненты и другие системные объекты.
Начиная с этих объектов, GC рекурсивно проходит по всем существующим ссылкам. Если до какого-либо объекта можно добраться по цепочке ссылок, он считается достижимым (живым) и не будет удален. Если же ни одна цепочка ссылок не ведет к объекту, он считается недостижимым и во время следующего этапа очистки от этого объекта память будет освобождена.
Для Blueprint-разработчика главный принцип очень прост: пока существует хотя бы одна действительная ссылка на объект, Garbage Collector не сможет удалить его из памяти.
Например, если в Blueprint персонажа имеется переменная, которая хранит ссылку на созданный объект инвентаря, этот объект будет существовать независимо от того, используется он в данный момент или нет. Если же переменная будет очищена (установлена в значение None), ссылка заменена на другой объект или объект будет удален из всех массивов и других контейнеров, он станет недостижимым. При следующем запуске Garbage Collector память, занимаемая этим объектом, будет автоматически освобождена.
Важно понимать, что очистка ссылки не уничтожает объект мгновенно. Она лишь делает его кандидатом на последующее удаление. Сам объект будет окончательно уничтожен только во время следующего прохода сборщика мусора.
Отдельно стоит рассмотреть удаление объектов из игрового мира. Например, при вызове функции Destroy Actor кажется, что объект исчезает сразу. На практике это не совсем так. После вызова этой функции Актор перестает отображаться, больше не участвует в игровом процессе и становится недоступным для взаимодействия. Однако сам объект некоторое время продолжает существовать в памяти.
Во время удаления объект помечается флагом Garbage (ожидающий удаления) или в более старых версиях Unreal Engine - PendingKill. После этого Garbage Collector проверяет, остались ли на него действительные ссылки. Если объект становится недостижимым, то при очередном проходе GC память, занимаемая им, будет освобождена. Такой подход позволяет избежать ситуаций, когда другие объекты продолжают обращаться к уже уничтоженному объекту.
Также важно помнить, что сборщик мусора не запускается каждый кадр. Постоянная проверка всех объектов значительно снижала бы производительность игры. Поэтому GC выполняется периодически: при загрузке уровней, во время некоторых внутренних операций движка, при нехватке памяти или принудительно по запросу разработчика. Конкретная периодичность зависит от настроек проекта и текущего состояния игры. Например, по умолчанию в настройках проекта (Project Settings) параметр TimeBetweenPurgingPendingKillObjects установлен в 60 сек. А это довольно большой срок, поэтому объекты могут «висеть» в памяти долго.
Подводя итог, можно сказать, что Garbage Collector автоматически управляет памятью Unreal Engine, удаляя только те объекты, которые стали недостижимыми. Пока в Blueprint на объект существует хотя бы одна действительная ссылка, он продолжает существовать. Как только все ссылки исчезают, объект становится кандидатом на удаление, и память устройства будет освобождена от этого объекта во время одного из следующих проходов сборщика мусора.
===============
Зарегистрироваться в ЛК и скачать книгу по Blueprint: [Blueprint. Взгляд с высоты «птичьего полёта»]