Сборка мусора (сравнение языков C# и Java)

Обновлен: Ноябрь 2007

В языках C и C++ для безопасного использования многих объектов программист должен выделить им ресурсы во время объявления. Ответственность за освобождение этих ресурсов и их перевод в пул свободной памяти во время использования объекта также лежит на программисте. Если ресурсы не освобождаются, по мере того, как все больше ресурсов используются без необходимости, код вызывает утечку памяти. С другой стороны, если ресурсы освобождаются преждевременно, может произойти потеря данных, повреждение других областей памяти и исключение указателя Null.

Как в Java, так и в C# указанные опасности нейтрализуют с помощью независимого управления временем существования всех объектов, используемых в приложении.

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

В C# сборка мусора выполняется с помощью среды CLR, которая обладает теми же функциональными возможностями, что и виртуальная машина Java. Сборщик мусора среды CLR периодически проверяет кучу памяти на наличие объектов, для которых отсутствуют ссылки, и освобождает ресурсы, выделенные для этих объектов.

См. также

Основные понятия

Руководство по программированию в C#

Автоматическое управление памятью

Другие ресурсы

Примеры кода C# для разработчиков на Java