An object is considered garbage when it can no longer be reached from any pointer in the running program
The most straightforward garbage collection algorithms simply iterate over every reachable object. Any objects left over are then considered garbage. The time this approach takes is proportional to the number of live objects, which is prohibitive for large applications maintaining lots of live data.
Naive garbage collection examines every live object in the heap
weak generational hypothesis, which states that most objects survive for only a short period of time.
there are typically some objects allocated at initialization that live until the process exits.
Some applications have very different looking distributions, but a surprisingly large number possess this general shape. Efficient collection is made possible by focusing on the fact that a majority of objects “die young”