Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In Java, when does an object become unreachable?

Tags:

In Java, what is an unreachable object? When does the object become unreachable? While studying garbage collection I was not able to understand this concept.

Can anyone give any ideas with examples?

like image 668
shree Avatar asked Apr 14 '11 18:04

shree


People also ask

What is an unreachable object in Java?

Unreachable Objects in JavaWhen an object does not contain any “reachable” reference to it, then we call it an unreachable object. These objects can also be known as unreferenced objects. Example of unreachable objects: Double d = new Double(5.6); // the new Double object is reachable via the reference in 'd'

What is an unreachable object?

Similarly, an unreachable object is a dynamically allocated object that has no reachable reference to it. Informally, unreachable memory is dynamic memory that the program can not reach directly, nor get to by starting at an object it can reach directly, and then following a chain of pointer references.

Can an unreachable object become reachable again in Java?

An unreachable object may become reachable again. This can happen when the object's finalize() method is invoked and the object performs an operation which causes it to become accessible to reachable objects.

What are unreachable objects in heap dump?

Histogram of Unreachable Objects A heap dump can contain unreachable objects, e.g. objects which should be garbage collected but stay around for various reasons. Usually this is due to optimizations in the garbage collection algorithm. The Memory Analyzer removes these objects by default from the object graph.


1 Answers

When there are no longer any reference variables referring to it, OR when it is orphaned in an island.

An island being an object that has a reference variable pointing to it, however that object has no reference variables pointing to it.

class A { int i = 5; } class B { A a = new A(); } class C {    B b;    public static void main(String args[]) {       C c = new C();       c.b = new B();       // instance of A, B, and C created       c.b = null;       // instance of B and A eligible to be garbage collected.    } 

EDIT: Just want to point out that even though the instance of A has a reference, it is on an island now because the instance of B does not have a reference to it. The A instance is eligible for garbage collection.

like image 130
maple_shaft Avatar answered Oct 21 '22 10:10

maple_shaft