Допустим, что программа выделяет некоторый ресурс, использует его все время, пока работает, но не освобождает его должным образом перед выходом.Когда эта программа завершается, ядро освобождает все программные ресурсы - это нормально.
Теперь рассмотрим ситуацию, когда какая-то функция создает утечку памяти при каждом вызове, и эта функция вызывается 100 раз в секунду.Через несколько минут или часов происходит сбой этой программы из-за отсутствия свободной памяти.
Плохо то, что программист, который делает утечки памяти и ресурсов типа 1, обычно делает утечки типа 2, производя грязный и нестабильный код,Профессиональный программист пишет идеальный код с нулевым ресурсом и утечками памяти.Если есть сборщик мусора - все нормально.Если нет - управляйте ресурсами самостоятельно.
Кстати, все еще возможно сделать утечку с помощью сборщика мусора - как хорошо известная утечка источника-потребителя события .NET.Таким образом, сборщик мусора очень полезен, экономит много времени разработчика, но в любом случае разработчик должен тщательно управлять программными ресурсами.