Бери от C программиста ... это о стоимости/выгоды и надлежащего использования
Алгоритмы сбора мусора, такие как трехцветный/наценки и прогонки зачастую значительная задержка между а ресурс «потерян» и освобожден физический ресурс. В некоторых операционных средах GC фактически приостанавливает выполнение программы для выполнения сбора мусора.
Будучи долгое время C программист, я могу вам сказать:
а) Руководство бесплатно() сбор мусора трудно - Это потому, что, как правило, большая частота ошибок в человеческом размещения свободных (), чем алгоритмы GC.
b) Ручная бесплатная() сборка мусора время - Время, затрачиваемое на отладку, перевешивает миллисекундные паузы GC? Возможно, полезно использовать сбор мусора, если вы пишете игру, чем скажем встроенное ядро.
Но, если вы не можете позволить себе недостаток времени выполнения (правильные ресурсы, ограничения в режиме реального времени), тогда выполнение ручного распределения ресурсов, вероятно, лучше. Это может занять некоторое время, но может быть на 100% эффективным.
Попробуйте представить ядро ОС, написанное на Java? или на .NET runtime с GC ... Просто посмотрите, сколько памяти JVM накапливается при запуске простых программ. Я знаю, что проекты такие, как это ... они просто заставляют меня чувствовать себя немного больным.
Просто имейте в виду, что мой linux box делает то же самое сегодня с 3 ГБ оперативной памяти, чем когда он имел 512 МБ памяти. Единственное различие заключается в том, что у меня работает моно/jvm/firefox и т. Д. Бизнес-кейс для GC ясен, но это все равно делает меня неудобным много времени.
Хорошие книги:
Dragon book (recent edition), Modern Compiler Implementation in C
http://stackoverflow.com/questions/1424660/garbage-collection-vs-non-garbage-collection-programming-languages –
@tusbar Хотя этот вопрос имеет общий заголовок, он только спрашивает о ошибках, которые разработчики могли бы сделать если они программируются без GC-языков. – rpattabi