從前,有個公司,名字叫Java。這個公司裏,每一個人都會呆在項目組裏,不在項目組的人就找不到了。
這個公司有個部門叫作GC,他過一陣子就說freeze了,全部部門清點本身要用的人。而後他把還在公司座位上坐着,可是卻不在任何組裏的人fire掉。
有的組呢,說,這我的,我在用,可是在freeze的時候請絕不客氣的把他fire掉。這中狀況呢,這個組要用WeakReference找這我的。找到了後正在使用的時候,固然就是直接使用了,不能fire。一旦用完就又只有經過WeakReference才能找到,這時候就又會在freeze的時候被GC掉了。
還有一種狀況,這個組以爲這我的還有點好用。只有在公司座位不夠的時候才fire他比較號。這種呢,就放在SoftRefrence聯繫人名單裏。GC開人的時候會找找看,若是這我的在且僅在SoftRefrence,公司又快沒座位坐了,就fire掉。
Java公司呢,還有些部門,好比IS(Information Security)部門。他們想在HR fire人的時候作些事情。這樣的人呢,IS會在PhantomReference表裏列着。若是HR決定要開這我的,HR就會把這我的交給IS指定的人去處理,好比把他的賬號都註銷等等。跟finalize不一樣的是,finalize是HR通知這個員工去收拾本身行李。
其實這個公司還有個「黑」名單,叫FinalReference。非公開的,呵呵,公司內部使用。