5
votes

The first phase of a mark-sweep garbage collector is to mark(find) all the live objects on the heap. To do this, there must be a starting point or root, from where all the marking begins. How does GC identify such roots?

2

2 Answers

3
votes

"A distinguished set of objects are assumed to be reachable: these are known as the roots. Typically, these include all the objects referenced from anywhere in the call stack (that is, all local variables and parameters in the functions currently being invoked), and any global variables.

Wikipedia

2
votes

Using the technique called root set enumeratios all roots will be identified. Here is sentence from Mark-sweep patent document.

In the first phase, all direct references to objects from currently running programs may be identified. These references are called roots, or together a root set, and a process of identifying all such references may be called root set enumeration

Here is link for patent document. Mark sweep patent link

Eventhough it was by .NET guy, I feel Basics of mark sweep link will give you good understanding on how it works.