从源码中我们可以看出,当执行WeakHashMap中的任意一个方法时,都会调用expungeStaleEntries()方法。到这里我们就可以完全理解为什么不把值设置为弱引用,不用显式调用remove方法就可以回收了。引用队列从上面的源码中,我们大概知道了引用队列的用途,那么为什么要使用引用队列呢?如果没有引用队列,我们??需要将上面例子中的所有元素一一遍历。如果数字小了还好,如果数字大了肯定会出现一些性能问题。有了引用队列,上面的问题就可以轻松解决了。从WeakReference的源码可以看出,有两个构造函数。第二个是引用队列helloword的使用需要注意的细节,需要传入引用队列:因为弱引用对象在GC发生的时候可能会被回收所以在使用之前,我们需要判断是否为null,避免空指针异常。总结弱引用的出现是为了垃圾回收。当一个对象只有弱引用指向它时,它可以被回收。弱引用在GC发生时会被回收,不管当时内存是否充足如果在创建弱引用时指定引用队列,当弱引用对象被回收时,该对象会被放入引用队列为了安全使用,每次都要判断检查对象是否为空,判断对象是否被回收,避免空指针异常
