Reclaiming Memory
Reclamation in the SSCLI consists of two principal steps: the copying of promoted ephemeral objects into the elder generation, followed optionally by a sweep of the elder generation for dead objects. A copy collection performed without a sweep is called an ephemeral collection to contrast it to a full collection. For either kind of collection, an initial liveness trace is used to distinguish live from dead objects within the generations that have been condemned (designated for collection); generation zero is traced alone for ephemeral collection, while both generations are traced for full collection.
Note
The SSCLI garbage collector, like many of the runtime services, is heavily instrumented in logging
. Not only does this help find and fix bugs, but it can also be very useful for understanding how it works. Try setting the COMPlus_LogLevel environment variable to 9 and the COMPlus_LogFacility environment variable to 0x80001 (which is a combination of the flag for logging the roots found and the flag for logging collection itself) and both COMPlus_LogToConsole and COMPlus_LogEnable to 1, to watch the garbage collector in action when running your programs. If you really want to go crazy, set COMPLus_GCtraceStart to 1, and you will see a live play-by-play trace of every action. See sscli/docs/techinfo/logging.html for detailed documentation on logging.
To quickly and safely visit all objects during the trace, all threads running managed code are suspended (except, ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access