Преимущество автоматической сборки мусора заключается в том, что вам не нужно явно освобождать / освобождать ваши объекты, как вы сказали. Недостатком является то, что вы не можете быть уверены, когда (или даже если) будет выпущен какой-либо экземпляр объекта.
В C # есть другие механизмы для освобождения других ресурсов, таких как файлы или соединения с БД, которые должны быть освобождены без ограничений. Например, using
позволяет вам точно убедиться, что IDispose вызывается для объекта.
Системы с сборкой мусора, как правило, используют больше памяти в любой момент времени, чем хорошо настроенная ручная реализация. Конечно, у вас нет утечек памяти.
Качество и производительность сборщиков мусора могут сильно различаться, и это то, что вы не можете контролировать. Например, при работе GC может быть заметная задержка. В .NET вы можете позвонить GC.Collect()
, чтобы сообщить GC, что сейчас будет хорошее время, но он может или не может слушать.
В наши дни Objective-C также собирает мусор на Mac. На iPhone это подсчитано, хотя, я полагаю, именно здесь вы столкнулись с проблемой.
В системах сбора мусора вы все еще можете столкнуться с проблемой, когда объект зависает на ссылке на объект, который, как вы ожидаете, будет собирать мусор. Сборщик мусора не будет очищать это, и поэтому память по существу утечка.
В системах с подсчетом ссылок вам не нужно отслеживать каждый объект, который указывает на экземпляры вашего объекта, но вам нужно указать, что вы хотите, чтобы они были освобождены.
РЕДАКТИРОВАТЬ: Полагаю, я не сказал этого явно - вы не можете вручную управлять выделением памяти в C #.