2hamed
2hamed

Reputation: 9047

How does Java garbage collector deals with circular references when their access path is broken?

Can someone please explain to me how does Java garbage collector realize those memory blocks (pictured in red area) are garbage when their reference count is more that 0 when they are practically inaccessible? heap space

Upvotes: 3

Views: 2551

Answers (3)

Nitesh Soni
Nitesh Soni

Reputation: 261

GarbageCollector works based on Java Memory Model. In java available application memory is divided in two parts: Heap and Stack. A object is stored in heap memory and can be accessed by 2 ways :-

1) Object can have reference variable which is stored in stack memory. In this case object can be directly accessed by using it's reference variable.

2) Object can be contained by any other object and would not have any reference in stack memory. In this case this object can be accessed only by using that container object. So if container object is garbage collected then this object must be eligible for garbage collection.

While doing GarbageCollection GarbageCollector checks whether a object is accessible directly or indirectly by any reference available in stack if it is then it won't collect this object else it do collect it.

Upvotes: 3

Jonas Høgh
Jonas Høgh

Reputation: 10874

The details of the GC algorithm are implementation dependent in Java, so it depends on your VM. But most VMs do not use reference counting. The official VM even has several configurable algorithms available. So it is hard to generalize about this.

Upvotes: 0

Victor Sorokin
Victor Sorokin

Reputation: 11996

There's set of "root objects" which are considered always accessible: e.g., Thread references, static variables, class references. If some object can not be reached via link of references from these root objects, it considered to be available for GC, even if there are some references to that object.

Upvotes: 13

Related Questions