Home Java Understanding References in Java

Understanding References in Java


In this journal entry we will taking a deep dive into understanding what are References in Java and how are they effected during the Garbage Collection process.

References in Java

Java has four main types of references.

  • Weak References
  • Strong References
  • Soft References
  • Phantom References

Most of the developers ask the question that why there are differenct types of references? What are they used for? To understand these lets understand these references in a more detailed way.

Read More: Reference Queues

Strong Reference: Strong references in Java are used everywhere. The object is created and then assigned to a reference. If the object has a strong reference, then the object will never be garbage collected.

DevelopersJournal objDevelopersJournal = new DevelopersJournal();

Soft Reference: If an object has no strong reference but has a soft reference, then the garbage collector reclaims this object’s memory. This needs to be done when GC needs to free up some memory. To get Object from a soft reference, one can invoke the get() method. If the object is not GCed, it returns the object, otherwise , it returns null.

Weak Reference: If an object has no strong reference but has a weak reference then GC reclaims this object’s memory in next run even though there is enough memory.

Phantom Reference: If an object does not have any of the above references then it may have a phantom reference. Phantom references can’t be accessed directly. When using a get() method it will always return null.

Phantom Reference can be used in situations, where sometimes using finalize() is not sensible.This is a special reference which says that the object was already finalized, and the garbage collector is ready to reclaim its memory.