Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Обзор сборщика мусора

Unity использует сборщик мусора для освобождения памяти. из объектов, которые ваше приложение и Unity больше не используют. Когда скрипт пытается выделить память в управляемой куче, но свободной памяти в куче недостаточно для размещения этой памяти, Unity запускает сборщик мусора. Когда сборщик мусора запускается, он проверяет все объекты в куче и помечает для удаления все объекты, на которые ваше приложение больше не ссылается. Затем Unity удаляет объекты, на которые нет ссылок, освобождая память.

Сборщик мусора обрабатывает последующие запросы таким же образом, пока не останется свободной области, достаточно большой для выделения требуемого размера блока. В этой ситуации маловероятно, что вся выделенная память все еще используется. бэкенды сценариев UnityСреда, обеспечивающая работу сценариев в Unity. Unity поддерживает три различных бэкэнда для сценариев в зависимости от целевой платформы: Mono, .NET и IL2CPP. Однако универсальная платформа Windows поддерживает только два: .NET и IL2CPP. Дополнительная информация
See in Словарь
может получить доступ только к элементу ссылки в куче, если есть по-прежнему являются ссылочными переменными, которые могут найти его. Если все ссылки на блок памяти отсутствуют (если ссылочные переменные были переназначены или если они являются локальными переменными, которые теперь находятся вне области действия), то сборщик мусора может перераспределить занимаемую им память.

Чтобы определить, какие блоки кучи больше не используются, сборщик мусора просматривает все активные ссылочные переменные и помечает блоки памяти, которые он называет «активными». По окончании поиска сборщик мусора считает любое пространство между «живыми» блоками пустым и помечает их для использования при последующих выделениях. Процесс обнаружения и освобождения неиспользуемой памяти называется сборкой мусора (GC).

Примечание. Сборщик мусора работает по-разному в WebGLJavaScript API, который отображает 2D и 3D графика в веб-браузере. Вариант сборки Unity WebGL позволяет Unity публиковать контент в виде программ JavaScript, использующих технологии HTML5 и API рендеринга WebGL для запуска контента Unity в веб-браузере. Подробнее
См. в Словарь
. Дополнительные сведения см. в разделе Соображения по сборке мусора.

В Unity сборщик мусора имеет следующие режимы:

Отслеживание распределения

В Unity есть следующие инструменты для отслеживания распределения памяти:

В модуле "Использование ЦП" представление "Иерархия" содержит столбец GC Alloc. В этом столбце отображается количество байтов, выделенных Unity в управляемой куче в определенном кадре. Он также отображает объем памяти, которой управлял сборщик мусора, и включает память, которую Unity могла выделить и повторно использовать в последующих кадрах. Это означает, что сумма GC Alloc по всем кадрам не равна сумме увеличения управляемой памяти за это время.

Чтобы получить наиболее точную информацию, вы всегда должны профилировать свое приложение в сборке для разработкиСборка для разработки включает символы отладки и включает Профилировщик. Подробнее
См. Словарь
на целевой платформе или устройстве, для которого вы хотите выполнить сборку. Редактор Unity работает иначе, чем сборка, и это влияет на данные профилирования; например, метод GetComponent всегда выделяет память при выполнении в редакторе, но не в построенном проекте.

Вы также можете использовать режим стеков вызовов в Profiler. Окно, помогающее оптимизировать игру. Он показывает, сколько времени вы тратите на различные области вашей игры. Например, он может сообщать о проценте времени, затраченном на рендеринг, анимацию или игровую логику. Подробнее
См. в Словарь
, чтобы определить, каким методом происходит распределение. Вы можете включить полные трассировки стека вызовов для образцов GC.Alloc, которые затем помогают определить, где и когда запускался сборщик мусора.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3