UP | HOME

Mark Sweep GC

Mark-Sweep is a classic GC algorithm, it's combined with two parts, mark and sweep.

Mark pseudo code would like:

mark(root):
    if !root.is_marked:
        root.is_marked = true
    for obj in root.knowns:
        mark(obj)

And Sweep pseudo code would like:

sweep(heap):
    for obj in heap:
        if obj.is_marked:
            obj.is_marked = false
        else:
            release(obj)

Let's use some graphs to show it(-> means known):

Start:

root -> obj1 -> obj2
         |
          \-> obj3

If we run collection=(mark-sweep), then since each object is reachable from =root, so no one would be released.

After running a function, obj1 don't need obj3 anymore, so it became:

root -> obj1 -> obj2

obj3

Now when we run collection, obj3 is unreachable from root, so it won't be marked! When running to sweep, it will be dropped.

Date: 2018-09-03 Mon 00:00

Author: Lîm Tsú-thuàn