... GC никогда не предназначался для управления ресурсами; он был разработан, чтобы управлять распределением памяти ... В конкретном случае соединений с базой данных, вы имеете дело с другими ресурсами, чем просто память ... (Scott Дорман)
ОП не помечать с конкретным хотя большинство ответов были .net-specific, отметив, что GC в основном для предотвращения утечек памяти, но расширения, такие как выражения using
и IDisposable
, могут многое помочь.
Другие платформы предлагают другие решения. Например, в C++ нет (встроенной) сборки мусора, но некоторые формы общих указателей могут использоваться для управления памятью, а стиль кодирования RAII может быть чрезвычайно полезен при управлении другими типами ресурсов.
В cPython используются две различные системы сбора мусора. Реферирующая реализация подсчета сразу же вызывает деструкторы, когда последняя ссылка удалена. Для обычных «стековых» объектов это означает, что они немедленно очищаются, например, что происходит для объектов C++ RAII. Недостатком является то, что если у вас есть эталонный цикл, сборщик подсчета ссылок никогда не удалит объект. В результате у них есть вторичный не детерминированный сборщик мусора, который работает как сборщики Java и .NET. Подобно .NET с его помощью, cPython пытается обрабатывать наиболее распространенные случаи.
Таким образом, для ответа на ОП недетерминированная сборка мусора помогает упростить управление памятью, она также может использоваться для обработки других ресурсов, поскольку своевременность не является проблемой, а другой механизм (например, тщательное программирование, ссылка подсчет GC, оператор using или реальные объекты RAII) необходимы, когда требуется своевременное выделение других ресурсов.
Хороший вопрос для тех, кто заинтересован в оптимизации своего кода. – Kon 2008-10-21 19:47:14
Как это связано с оптимизацией кода? – 2008-10-21 19:54:51