Garbage Collection: Algorithms for Automatic Dynamic Memory Management Rafael D Lins, Richard Jones
Publisher: Wiley
GC basically attempts to take care of two basic scenarios remove garbage and avoid dangling pointers. Manual memory management debates ended years ago. Thankfully, modern languages with automatic garbage collection avoid this problem (by pretending it doesn't exist). Gc exposes the underlying memory management mechanism of Python, the automatic garbage collector. As I pointed out yesterday, with FastMM available, memory management is so much of a solved problem that it's a non-problem. As I discussed in my last coder from the hard task. (See: every implementation of garbage collection ever devised, including ARC.) This is where semantic attributes come in. C++ supports dynamic memory allocation with the help of new and delete. It doesn't support automatic garbage collection, one of the most important features introduced in Java. Garbage Collection does exactly what it's more fancier name “Automatic dynamic memory management” suggests. Now we use Python, Ruby, Java, Javascript, Erlang, and C#, and enjoy the Data-size optimization in dynamic languages is the new cycle counting. One of the duty of a GC system is to automate this process by tracking down (using various algorithms) such objects and reclaim the memory used by them automatically. Moving object fields to an object's or record's automatic destruction list would mean moving them to FinalizeRecord, and for the life of me, I cannot understand why FinalizeRecord exists at all. Assembly language debates which came before them, it's hard to argue in favor of tedious bookkeeping when there's an automatic solution. In typical memory management implementations, memory is automatically garbage collected when the last reference to a variable is removed.