Java Garbage collector tracks the live object and objects which are no more need are marked for garbage collection. It relieves developers to think of memory allocation/deallocation issues.
JVM uses the heap, for dynamic allocation. In most of the cases, the operating systems allocate the heap in advance which is then to be managed by the JVM while the program is running. It helps in following ways:
Faster object creation as Operating system level synchronization is no more needed for each object. Object Allocation takes some memory and increases the offset.
When an object is not required, garbage collector reuses the object's memory for further allocation.
As objects forms tree, they have one or more root objects. If root objects are reachable, the whole tree is reachable. There are some special objects as well which are garbage collection roots (GC roots) and are always reachable.