use*_*949 94 java garbage-collection weak-references
可能重复:
弱引用 - 它们有用吗?
由于垃圾收集器可以随时声明弱引用,是否有任何实际的理由使用它们?
Pet*_*rey 45
如果您希望保留对某些内容的引用,只要它在其他地方使用,例如Listener,您就可以使用弱引用.
WeakHashMap可以用作派生数据的密钥的短期缓存.它还可以用于保存有关其他对象的信息,并且您不知道何时丢弃这些对象.
BTW Soft References就像弱引用一样,但它们并不总是立即清理.GC将始终丢弃弱引用,并尽可能保留软引用.
还有另一种称为幻影参考的参考.这在GC清理过程中使用,并且指的是"正常"代码无法访问的对象,因为它在清理过程中.
Eri*_*ert 29
由于垃圾收集器可以在任何时候声称弱引用,是否有任何实际的理由使用它?
当然有使用它的实际原因.如果框架设计者花费巨大的代价来构建一个不切实际的弱参考系统,你会不会觉得奇怪?
我想你想问的问题是:
人们使用弱引用的现实情况是什么?
有许多.常见的是实现性能目标.在对应用程序进行性能调整时,通常必须在更多内存使用和更多时间使用之间进行权衡.例如,假设您必须执行多次复杂计算,但计算是"纯粹的" - 答案仅取决于参数,而不取决于外生状态.您可以构建一个缓存 - 从参数到结果的映射 - 但然后使用内存.你可能永远不会再问这个问题,然后就会浪费内存.
弱引用可能解决了这个问题; 缓存可能会变得非常大,因此如果多次询问相同的问题,则会节省时间.但是如果缓存变得足够大以至于垃圾收集器需要回收空间,那么它可以安全地进行.
缺点当然是垃圾收集器的清理策略被调整为满足整个系统的目标,而不是特定的缓存问题.如果GC策略和所需的缓存策略充分对齐,那么弱引用是解决此问题的高度实用的解决方案.
Bil*_*ell 14
如果WeakReference是对象的唯一引用,并且您希望对象挂起,则应该使用SoftReference.
WeakReferences最好用于会有对象的其他引用的情况,但是你不能(或不想要)检测何时不再使用那些其他引用.然后,另一个引用将阻止对象被垃圾收集,而WeakReference将只是另一种获取相同对象的方式.
两个常见用例是:
Noa*_*oah 12
我们出于这个原因使用它 - 在我们的例子中,我们有各种必须注册服务的监听器.该服务保持对侦听器的弱引用,而实例化的类保留强引用.如果这些类在任何时候得到GC,那么弱引用就是听众的剩余部分,然后它也将被GC控制.它使得更容易跟踪中间类.
弱引用的最常见用法是"查找"映射中的值.
使用普通(硬)值引用时,如果映射中的值不再在其他位置引用它,则通常不再需要查找.对于弱引用的映射值,一旦没有其他引用,该对象就成为垃圾收集的候选对象
地图本身具有(唯一)对象的引用这一事实不会阻止它被垃圾收集,因为引用是弱引用
| 归档时间: |
|
| 查看次数: |
24220 次 |
| 最近记录: |