Java Reference的简单总结

介绍

J ava 2 平台中引入 java.lang.ref 包(其中包含 SoftReference WeakReference PhantomReference ReferenceQueue 类)。 SoftReference WeakReference PhantomReference 都是弱引用,他们的强弱程度依次是 SoftReference-> WeakReference->PhantomReference (由强到弱)。

  • SoftReference

    软引用 的原理是:在保持对对象的引用时保证在 JVM 报告内存不足情况之前将清除所有的软引用。关键之处在于,垃圾收集器在运行时可能会(也可能不会)释放软可及对象。对象是否被释放取决于垃圾收集器的算法以及垃圾收集器运行时可用的内存数量。

  • WeakReference

    垃圾收集器运行时如果碰到了弱可及对象,将释放 WeakReference 引用的对象。然而,垃圾收集器可能要运行多次才能找到并释放弱可及对象。

  • PhantomReference

    PhantomReference 类只能用于跟踪对被引用对象即将进行的收集。同样,它还能用于执行 pre-mortem 清除操作。 PhantomReference 必须与 ReferenceQueue 类一起使用。需要 ReferenceQueue 是因为它能够充当通知机制。当垃圾收集器确定了某个对象是虚可及对象时, PhantomReference 对象就被放在它的 ReferenceQueue 上。将 PhantomReference 对象放在 ReferenceQueue 上也就是一个通知,表明 PhantomReference 对象引用的对象已经结束,可供收集了。这使您能够刚好在对象占用的内存被回收之前采取行动。

  • ReferenceQueue

    当某个弱引用对象的可达性被垃圾搜集器改变或清除后或将要清除时,会被放入对应的 ReferenceQueue 中(如果存在对应的引用队列的话)。

总结

弱引用机制是和垃圾回收机制紧密相关的,实际上就是用来和垃圾回收器交互的一个手段。目的是为了让垃圾回收器在适当的时候回收掉一些不需要的对象引用,释放内存,从而使 Java 的内存管理机制更加高效。


参考资料
Understanding Weak References
学习如何有效地使用 SoftReference WeakReference PhantomReferen ce

用软引用阻止内存泄漏


你可能感兴趣的:(java,jvm,算法,J#)