| Strong Reference |
An ordinary reference. Keeps objects alive as long as they are referenced. |
normal reference. |
Any object not pointed to can be reclaimed. |
default |
| Soft Reference |
Keeps objects alive provided there’s enough memory. |
to keep objects alive even after clients have removed their references (memory-sensitive
caches), in case clients start asking for them again by key. |
After a first gc pass, the JVM decides it still needs to reclaim more space. |
java.lang.ref.SoftReference |
| Weak Reference |
Keeps objects alive only while they’re in use (reachable) by clients. |
Containers that automatically delete objects no longer in use. |
After gc determines the object is only weakly reachable |
java.lang.ref.WeakReference
java.util.WeakHashMap |
| Phantom Reference |
Lets you clean up after finalization but before the space is reclaimed (replaces
or augments the use of finalize()) |
Special clean up processing |
After finalization. |
java.lang.ref.PhantomReference |