The difference between a {@code SoftReference} and a {@code WeakReference} is
the point of time at which the decision is made to clear and enqueue the
reference:
*
* <ul>
* <li>
* A {@code SoftReference} should be cleared and enqueued <em>as late as
* possible</em>, that is, in case the VM is in danger of running out of
* memory.
* </li>
* <li>
* A {@code WeakReference} may be cleared and enqueued as soon as is
* known to be weakly-referenced.
* </li>
* </ul>
the point of time at which the decision is made to clear and enqueue the
reference:
*
* <ul>
* <li>
* A {@code SoftReference} should be cleared and enqueued <em>as late as
* possible</em>, that is, in case the VM is in danger of running out of
* memory.
* </li>
* <li>
* A {@code WeakReference} may be cleared and enqueued as soon as is
* known to be weakly-referenced.
* </li>
* </ul>
*/
软引用和弱引用的差别在于决定清除和重置引用的时间点不同
软引用的清除和重置应该尽可能晚,这是为了防止vm处在内存溢出的环境中
弱引用的清除或者冲着应该在其被指明为若指引状态时就被清除和重置