Garbage collection is the process of taking care of unused memory on the heap. There are two types of memory storage in programming; the stack and the heap. The stack is very carefully managed portion of memory that has strict rules for storing and removing memory. The heap has essentially no rules, and is managed entirely by the program which is accessing memory on it.
Because the heap is managed by the program, things can go pretty wrong while it's in use. The most prominent problem is something called a memory leak. Memory leaks happen when a program allocates memory on the heap and then never returns that memory to the OS, causing a program to quickly eat up more memory than it needs.
Programming languages like C require the programmer to manage memory on the heap themselves, which can frequently lead to memory leaks in more complex programs. Higher level languages like Java avoid this through garbage collection. Garbage collection automates the process of returning memory allocated from the heap to the OS, avoiding the problem of memory leaks. This allows for faster development and more stable programs.
The downside of garbage collection is that it's slower and less precise than manually memory management. If a programmer is willing to take the time to manage the memory themselves, they can do it more efficiently than a garbage collector can since the garbage collector has to determine when to return memory, while a programmer can determine that themselves.