September 16, 2013 5 Comments
Once an object is discovered to be no longer reachable, the garbage collector checks to see if the object has a finalizer. If the object doesn’t have a finalizer, it is marked for collection and its memory is reclaimed by the garbage collector.
If an object has a finalizer, it will not be marked for garbage collection, but instead be marked for finalization. It will not get garbage collected during the current pass of the garbage collector. Instead, its finalizer will be run at some point after garbage collection finishes. It will then be eligible for collection during the next pass of the garbage collector.
Reclaiming memory for objects with finalizers therefore requires at least two passes of the garbage collector.