Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Форма автоматического управления памятью
сборка мусора в управлении памятью
Form of automatic memory management
garbage collection in memory management
[[Файл:Структура и интерпретация компьютерных программ p.764a. gif|thumb|400px|Сборка мусора со остановкой и копированием в архитектуре Lisp: Другие подобные методы включают выделение памяти в стеке, вывод областей и владение памятью, а также их комбинации. Сборка мусора может занимать значительную долю общего времени обработки программы и, как следствие, влиять на производительность. Ресурсы, отличные от памяти, такие как сетевые сокеты, дескрипторы баз данных, окна, дескрипторы файлов и дескрипторы устройств, обычно не обрабатываются сборкой мусора, а другими методами (например, деструкторами). Некоторые из этих методов также освобождают память.
[[File:Structure and Interpretation of Computer Programs p.764a. gif|thumb|400px|Stop and copy garbage collection in a Lisp architecture: Other, similar techniques include stack allocation, region inference, and memory ownership, and combinations thereof. Garbage collection may take a significant proportion of a program's total processing time, and affect performance as a result. Resources other than memory, such as network sockets, database handles, windows, file descriptors, and device descriptors, are not typically handled by garbage collection, but rather by other methods (e. g. destructors). Some such methods de allocate memory also.
Обзор
Многие языки программирования требуют сборки мусора, либо как часть спецификации языка (например, RPL, Java, C#, D,
Many programming languages require garbage collection, either as part of the language specification (e. g., RPL, Java, C#, D,
Преимущества
GC освобождает программиста от необходимости вручную освобождать память. Это помогает избежать некоторых видов ошибок:
GC frees the programmer from manually de allocating memory. This helps avoid some kinds of errors:
Висячие указатели, возникающие, когда участок памяти освобождается, пока на него все еще существуют указатели, и один из этих указателей разыменовывается. К этому моменту память могла быть перераспределена для другого использования, что приведет к непредсказуемым результатам. Ошибки двойного освобождения, возникающие, когда программа пытается освободить область памяти, которая уже была освобождена, и, возможно, уже была выделена повторно. Определенные виды утечек памяти, когда программа не освобождает память, занимаемую объектами, которые стали недостижимыми, что может привести к исчерпанию памяти.
Dangling pointers, which occur when a piece of memory is freed while there are still pointers to it, and one of those pointers is dereferenced. By then the memory may have been reassigned to another use, with unpredictable results. Double free bugs, which occur when the program tries to free a region of memory that has already been freed, and perhaps already been allocated again. Certain kinds of memory leaks, in which a program fails to free memory occupied by objects that have become unreachable, which can lead to memory exhaustion.
Недостатки
GC использует вычислительные ресурсы для определения, какую память освобождать. Следовательно, платой за удобство отсутствия ручной аннотации времени жизни объектов в исходном коде является накладные расходы, которые могут снизить производительность программы.
GC uses computing resources to decide which memory to free. Therefore, the penalty for the convenience of not annotating object lifetime manually in the source code is overhead, which can impair program performance.