CHAPTER 13 UNDERSTANDING OBJECT LIFETIME
•
References to object parameters passed into a method
•
References to objects waiting to be finalized (described later in this chapter)
•
Any CPU register that references an object
During a garbage collection process, the runtime will investigate objects on the managed heap to
determine whether they are still reachable (i.e., rooted) by the application. To do so, the CLR will build
an object graph, which represents each reachable object on the heap. Object graphs are explained in
some detail during the discussion of object serialization in Chapter 20. For now, just understand that
object graphs are used to document all reachable objects. As well, be aware that the garbage collector
will never graph the same object twice, thus avoiding the nasty circular reference count found in COM
programming.
Assume the managed heap contains a set of objects named A, B, C, D, E, F, and G. During a garbage
collection, these objects (as well as any internal object references they may contain) are examined for
active roots. After the graph has been constructed, unreachable objects (which we will assume are
objects C and F) are marked as garbage. Figure 13-3 diagrams a possible object graph for the scenario
just described (you can read the directional arrows using the phrase depends on or requires, for example,
E depends on G and B, A depends on nothing, and so on).
Figure 13-3. Object graphs are constructed to determine which objects are reachable by application roots
After objects have been marked for termination (C and F in this case—as they are not accounted for
in the object graph), they are swept from memory. At this point, the remaining space on the heap is
compacted, which in turn causes the CLR to modify the set of active application roots (and the
underlying pointers) to refer to the correct memory location (this is done automatically and
transparently). Last but not least, the next object pointer is readjusted to point to the next available slot.
Figure 13-4 illustrates the resulting readjustment.
478