`

WeakReference

阅读更多

reachable, the following happens:
A set ref of references is determined. ref contains the following elements:
All weak references pointing to obj.
All weak references pointing to objects from which obj is either strongly or softly reachable.
All references in ref are atomically cleared.
All objects formerly being referenced by ref become eligible for finalization.
At some future point, all references in ref will be enqueued with their corresponding reference queues, if any.
Weak references are useful for mappings that should have their entries removed automatically once they are not referenced any more (from outside). The difference between a SoftReference and a WeakReference is the point of time at which the decision is made to clear and enqueue the reference:
A SoftReference should be cleared and enqueued as late as possible, that is, in case the VM is in danger of running out of memory.
A WeakReference may be cleared and enqueued as soon as is known to be weakly-referenced.

(1)WeakReference
   WeakReference实现了一个弱引用,弱引用是三种引用(StrongReference、WeakReference、SoftReference)中的一个。一旦垃圾回收器判定一个对象是是弱获取(对象可获取程度分为五种strongly reachable,softly reachable、weakly reachable、phantomly reachable、unreachable),则下列情况发生:
计算一组引用的ref,ref包括下列元素:
所有指向obj的弱引用
所有指向objects的弱引用,objects是软获取对象或者是强获取对象
在ref中的所有引用被自动删除
所有以前被ref引用的对象都符合终止条件的对象(become eligible for finalization)
在未来的某个时间,所有的在ref中的引用将被放入合适的引用队列中
弱引用对那些映射,这些映射中的实体的引用一旦被不存在这些实体将被自动删除。弱引用和软引用的区别是清空和将加入排队的时间点不同:
一个弱引用应该尽可能晚的被清除和加入队列,那是因为如果内存不足是vm将是危险的
弱引用对象是一旦知道引用的是弱获取对象就会被清除和入队。

 

A SoftReference should be cleared and enqueued as late as possible, that is, in case the VM is in danger of running out of memory.

一个软引用应该尽可能迟的被清理和入列,因此,在这种情况下虚拟机(VM)就存在内存溢出的风险(危险)。

个人理解:问题在“as late as possible”——始终过迟的清理垃圾,肯定就有内存溢出的风险(危险)。 
------------------------------------
All objects formerly being referenced by ref become eligible for finalization.
所有先前被ref引用的对象都将符合垃圾回收(finalization)的条件。
ref:地址引用,java里就是指被new创建的对象。
除非是使用JNI,所占用的内存将不在ref的范围(Thinking in Java 4th, 120页)
分享到:
评论

相关推荐

    SoftReference、WeakReference和PhantomRefrence分析和比较

    SoftReference、WeakReference和PhantomReference分析和比较 在 Java 中,引用类型分为强引用、软引用、弱引用和虚引用四种。强引用是我们最常用的引用类型,而软引用、弱引用和虚引用则是 Java 为我们提供的三种...

    WeakDelegate,Weakreference财产委托提议.zip

    在IT行业中,尤其是在Android或Java开发中,弱引用(WeakReference)是一个重要的概念,它用于内存管理,防止内存泄漏。这个“WeakDelegate,Weakreference财产委托提议.zip”项目显然是一个Kotlin实现的开源项目,旨在...

    Java引用总结--StrongReference、SoftReference、WeakReference、PhantomRef

    Java从1.2版本开始引入了四种引用,分别是强引用(StrongReference)、软引用(SoftReference)、弱引用(WeakReference)和虚引用(PhantomReference)。这四种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用...

    WeakReference(弱引用)让GC需要时回收对象

    WeakReference wref = new WeakReference(obj); // 创建一个弱引用指向该对象 obj = null; // 断开原对象的强引用 // 检查对象是否已被回收,并尝试重新获得强引用 Object obj2 = wref.Target; if (obj2 != null) ...

    详解Java弱引用(WeakReference)的理解与使用

    Java 弱引用(WeakReference)的理解与使用 Java 中的弱引用(WeakReference)是一种特殊的引用类型,它可以帮助我们更好地管理内存和避免内存泄漏。在 Java 中,当一个对象被创建时,它被放在堆(Heap)中。当垃圾...

    StrongReference,SoftReference, WeakReference的使用实例

    StrongReference,SoftReference, WeakReference的使用实例,请参照博客:http://blog.csdn.net/To_be_Designer/article/details/72673421

    WPF MVVM视图绑定到单例和WeakReference

    在这个场景中,标题“WPF MVVM视图绑定到单例和WeakReference”涉及到两个关键概念:单例模式和弱引用。 首先,单例模式是一种设计模式,确保一个类只有一个实例,并提供全局访问点。在C#中,我们通常通过静态方法...

    AsyncTask_WeakReference

    `WeakReference`是Java和Kotlin中处理引用的一种机制,它可以帮助我们防止内存泄漏。在`AsyncTask`与`WeakReference`结合使用时,可以确保当Activity或Fragment被销毁时,相关任务不会因为强引用而继续存在,从而...

    android大位图二次采样处理三

    3. 使用软引用或弱引用:通过SoftReference或WeakReference持有Bitmap对象,帮助垃圾回收器更好地管理内存。 总结,大位图的二次采样处理是Android开发中解决内存问题的关键技术。开发者需要理解其原理,掌握计算...

    weakref-allocation:在您的应用程序中公开 WeakReference 使用

    这是对 java.lang.ref.WeakReference 实现的修改,它将通过 JMX MBean 跟踪和报告它发现的内容。如何使用: 在您的应用程序中启用 JMX。 然后使用指向此实现的引导类路径启动 Java 应用程序。 例如: $ java -...

    安卓面试题

    - **解决方案**:使用WeakReference替代强引用。 #### 15. 接口与抽象类的区别 - **接口**:只能定义方法签名,不能有方法体。 - **抽象类**:可以有抽象方法也可以有具体实现的方法。 #### 16. String、...

    简单缓存Cache介绍

    private Dictionary, WeakReference> Buffer = new Dictionary, WeakReference>(); public object this[string key] { get { WeakReference ret; if (Buffer.TryGetValue(key, out ret) && ret.IsAlive) ...

    深入探讨 java.lang.ref 包1

    本文将深入探讨这个包中的四种主要引用类型:StrongReference、SoftReference、WeakReference 和 PhantomReference,以及它们的特性、用法和作用。 首先,强引用(StrongReference)是我们在日常编程中最常见的引用...

    深入探讨 java-lang-ref 包.docx

    WeakReference<Bean> beanRef = new WeakReference(new Bean("name", 10)); System.out.println(beanRef.get()); // “name:10” PhantomReference 是最弱的一种引用类型,它并不直接指向对象,而是指向对象的引用...

    Android处理内存泄漏的代码例子

    WeakReference<Activity> weakActivity = new WeakReference(activity); // 使用weakActivity.get()访问Activity // 当不再需要时,弱引用不会阻止Activity被回收 weakActivity.clear(); ``` 在ExmLeak这个压缩包...

    Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存

    例如,创建一个处理消息的静态内部类`MyHandler`,并在其中使用`WeakReference`持有`Activity`的引用: ```java public class MyActivity extends AppCompatActivity { private static class MyHandler extends ...

    HandlerDemo.7z

    在这段代码中,`weakRef`使用`WeakReference`包装`Activity`,确保即使`Handler`有未处理的消息,`Activity`也能正常被回收。 综上所述,`HandlerDemo.7z`可能包含了一个演示了`Handler`使用、计时器功能以及弱...

Global site tag (gtag.js) - Google Analytics