Garbage collector em C#: o que é e como funciona