- As we know that the garbage collector facilitates automatically garbage-collection in java.
- Garbage collector determines when no references exist to an object, Then object is assumed to be no longer needed and its memory is reclaimed.
- Now if you need more flexible control over the garbage collection process, Java provides very useful classes for that in java.lang.ref package.
Soft References | Weak References | Phantom References |
---|---|---|
Soft references - Inhibits collection until memory runs short. | Weak references provide access to an object without preventing it from being freed. | Phantom references used for cleanup when objects are freed. |
Java soft references provide a mechanism to use all available memory as cache And It would be freed only when the system needs the additional resources. | Weak references only get collected if no other object references it except the weak references. | A phantom reference will be finalized but the memory will not be reclaimed, Phantom reference can be useful when you want to be notified that an object is about to be collected. |
Garbage collector will attempt to free soft references before throwing an out-of-memory exception, And it will attempt to free soft references in least recently used order. | Weak reference will not pin an object in to memory, In fact, An object that is identified as weakly reachable will be garbage collected at the next GC cycle. | The only use for phantom reference is keeping track of when object gets enqueued into a ReferenceQueue, As at that point of time you'll know that the object to which it pointed is dead. |
Application of soft refences : 1. Cache memory implementation 2. To avoid / resolve memory leak | Application of Weak references: 1. Weak references are used inside WeakHashMap class implementation for storing keys. | Application of phantom references : 1. It's used for scheduling pre-mortem cleanup actions in a more flexible way than is possible with the Java finalization mechanism. |