弱引用

弱引用

  弱引用允许应用程序访问对象,同时也允许垃圾回收器收集相应的对象。如果不存在强引用,则弱引用的有限期只限于收集对象前的一个不确定的时间段。使用弱引用时,应用程序仍可对该对象进行强引用,这样做可防止该对象被收集。但始终存在这样的风险:垃圾回收器在重新建立强引用之前先处理该对象。

  弱引用特别适合以下对象:占用大量内存,但通过垃圾回收功能回收以后很容易重新创建。

  当用户切换到应用程序的其他部分时,可使用 WeakReference 类来创建对该树的弱引用,并销毁所有强引用。当用户切换回该树时,应用程序会尝试获得对该树的强引用,如果得到,就不必重新构造该树。

  要对某个对象建立弱引用,请使用要跟踪的对象的实例创建一个 WeakReference。然后将 Target 属性设置为该对象,将该对象设置为 null。有关代码示例,请参见类库中的 WeakReference

  下面的示例使用短弱引用创建数据对象的缓存。此示例摘自为 WeakReference 类提供的一个更大的示例。

  

参考:http://msdn.microsoft.com/zh-cn/library/sk6k8h17(v=vs.90).aspx

  

弱引用,布布扣,bubuko.com

时间: 2024-10-27 00:14:02

弱引用的相关文章

使用软引用和弱引用防止内存溢出

下面以使用软引用为例来详细说明.弱引用的使用方式与软引用是类似的. 假设我们的应用会用到大量的默认图片,比如应用中有默认的头像,默认游戏图标等等,这些图片很多地方会用到.如果每次都去读取图片,由于读取文件需要硬件操作,速度较慢,会导致性能较低.所以我们考虑将图片缓存起来,需要的时候直接从内存中读取.但是,由于图片占用内存空间比较大,缓存很多图片需要很多的内存,就可能比较容易发生OutOfMemory异常.这时,我们可以考虑使用软引用技术来避免这个问题发生. 首先定义一个HashMap,保存软引用

Android中的WeakReference 弱引用

WeakReference 弱引用 定义:弱引用,与强引用(我们常见的引用方式)相对:特点是:GC在回收时会忽略掉弱引用对象(忽略掉这种引用关系),即:就算弱引用指向了某个对象,但只要该对象没有被强引用指向,该对象也会被GC检查时回收掉. 强引用实例自然不会被GC回收! 如何引出弱引用?弱引用的实际用途是什么? 什么是内存泄漏?Java使用有向图机制,通过GC自动检查内存中的对象:如果GC发现一个或一组对象为不可达的状态,则将该对象从内存中回收.也就是说:一个对象不被任何引用所指向,则该对象会在

java对象的强引用,软引用,弱引用和虚引用

从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 1.强引用 以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用.如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题.一般都是new出来的. Object o=new

Lua程序设计 第17章 弱引用笔记

鉴于之前我对lua的评价,在此需要修改了一下我的言论:游戏开发语言工作中,最成熟的客户端开发组合:C/C++.Lua/C#.assembly汇编.C/C++系列用于完成游戏引擎框架,汇编用于优化,Lua负责游戏逻辑.在全局上满足了性能.可读性.变化性的需求.因为我选的是引擎方向,实际上只能吃透C/C++系列我才可能获得引擎 职位.另外推荐一本书<游戏引擎框架>-叶劲峰翻译的那本,并没有csdn某人读后感言"引擎水真深"的感觉.这本书写得好,可是那个废人却在叶劲峰的专访中说这

C++中弱符号(弱引用)的意义及实例

今天读别人代码时看到一个“#pragma weak”,一时没明白,上网研究了一个下午终于稍微了解了一点C.C++中的“弱符号”,下面是我的理解,不正确的地方望大家指正. 本文主要从下面三个方面讲“弱符号”: 1. 什么是“弱符号”? 它与“强符号”的区别是什么? 2. 弱符号的有什么作用? 3. 弱符号的实际应用实例 1.什么是弱符号? 在WikiPedia中弱符号的定义是: a weak symbol is a symbol definition in an object file or dy

Java之强引用、 软引用、 弱引用、虚引用

1.强引用   平时我们编程的时候例如:Object object=new Object():那object就是一个强引用了.如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题. 2.软引用(SoftReference)   如果一个对象只具有软引用,那就类似于可有可物的生活用品.如果内存空间足够,垃圾回收器就不会回收它,如果

Java 强引用、 软引用、 弱引用、虚引用

 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用.下图为对象应用类层次. ⑴强引用(StrongReference)   强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内

Java -强引用&amp;弱引用

⑴强引用(StrongReference) 就是通过new得的对象引用 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题. 使用强引用的一个例子. 图像缓存问题,图像缓存应该阻止我们重新载入图像,所以图像缓存保存有内存中已有的所有图像的引用,如果使用通常的强引用,强引用本身会使得图像一直存留在内存中,这样就使得程序员像上面一样

java中虚引用PhantomReference与弱引用WeakReference(软引用SoftReference)的差别

之前的这篇博客介绍了java中4种引用的差别和使用场景,在最后的总结中提到: "软引用和弱引用差别不大,JVM都是先把SoftReference和WeakReference中的referent字段值设置成null,之后加入到引用队列:而虚引用则不同,如果某个堆中的对象,只有虚引用,那么JVM会将PhantomReference加入到引用队列中,JVM不会自动将referent字段值设置成null".这段总结写的比较仓促,也没有给出实际的例子加以佐证.本文主要是重申下这几种引用的差别,并

Java 理论与实践: 用弱引用堵住内存泄漏---转载

要让垃圾收集(GC)回收程序不再使用的对象,对象的逻辑 生命周期(应用程序使用它的时间)和对该对象拥有的引用的实际 生命周期必须是相同的.在大多数时候,好的软件工程技术保证这是自动实现的,不用我们对对象生命周期问题花费过多心思.但是偶尔我们会创建一个引用,它在内存中包含对象的时间比我们预期的要长得多,这种情况称为无意识的对象保留(unintentional object retention). 全局 Map 造成的内存泄漏 无意识对象保留最常见的原因是使用 Map 将元数据与临时对象(trans