Сборка мусора
Материал из Википедии — свободной энциклопедии
В программировании, сборка мусора (англ. garbage collection, GC) — одна из форм автоматического управления памятью. Специальный код, называемый сборщиком мусора (garbage collector), пытается освободить память, использованную объектами, которые уже не будут востребованы приложением — то есть производит сборку мусора. Сборка мусора была изобретена Джоном Маккарти (John McCarthy) примерно в 1959 при разработке языка программирования Лисп, для решения проблем, которые порождало ручное управление памятью.
Сборка мусора часто противопоставляется ручному управлению памятью, при котором программист явно указывает, когда и какие области памяти надо освободить. Однако есть языки, в которых используется комбинация двух методов управления памятью, равно как есть и другие технологии решения той же фундаментальной проблемы (например, en:region inference).
По сравнению с ручным управлением памятью, сборка мусора безопаснее, поскольку она предотвращает утечки памяти, а также упрощает сам процесс программирования. Недостатком сборки мусора является меньшая эффективность, как по скорости, так и по объёму используемой памяти. Кроме освобождения памяти, сборщик мусора также дефрагментирует (уплотняет) объекты в памяти системы, перемещая их так, что бы они занимали сплошную область памяти, что благоприятно отражается на производительности системы.
Некоторые языки программирования требуют использования механизма сборки мусора в соответствии со своей спецификацией (Java, C#), другие — по причинам эффективности реализации (например, формальные языки для лямбда-исчисления) — эти языки называются языками со сборкой мусора.
Некоторые языки (например, Modula-3) позволяют использовать как ручное управление памятью так и сборку мусора в одном приложении — используя две отдельные кучи.
Базовые принципы работы сборщика мусора:
- определение объектов программы, которые в будущем не будут использоваться;
- освобождение памяти, занимаемой этими объектами.
Хотя в общем случае невозможно точно определить момент, когда объект был использован в последний раз и больше не нужен, сборщики мусора используют консервативные оценки, позволяющие определить, что в будущем объект уже не будет использоваться. Например, если в системе нет больше ссылок на данный объект — то он больше не может быть использован программой. Этот критерий используется большинством современных сборщиков мусора.