http://www.pawlan.com/monica/articles/refobjs/
https://stackoverflow.com/questions/299659/whats-the-difference-between-softreference-and-weakreference-in-java
Analogy: Assume a JVM is a kingdom, Object is a king of the kingdom, and GC is an attacker of the kingdom who tries to kill the king(object).
- When King is Strong, GC can not kill him.
- When King is Soft, GC attacks him but King rule the kingdom with protection until resource are available.
- When King is Weak, GC attacks him but rule the kingdom without protection.
- When king is Phantom, GC already killed him but king is available via his soul.