C#WeakReference弱引用

简介: 原文:C#WeakReference弱引用  弱引用:在引用对象的同时,允许垃圾回收该对象。 .NET中提供了WeakReference对象来实现这个功能。 对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用, 同时希望GC必要时回收时,可以考虑使用弱引用。
原文: C#WeakReference弱引用

 

弱引用:在引用对象的同时,允许垃圾回收该对象。

.NET中提供了WeakReference对象来实现这个功能

对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,

同时希望GC必要时回收时,可以考虑使用弱引用。弱引用使用起来很简单,

 

WeakReference w = new WeakReference(xml);//创建若引用对象
if (w.IsAlive)//判断是否已被垃圾回收
{
XmlDocument xml1 = w.Target as XmlDocument;//转换为指定的对象类型给你

}

 

WeakReference的构造函数有两个重载。

下面的这些话是引用别人的微博,因为自身不太理解,就不多述。

原文出自:http://www.cnblogs.com/jeekun/archive/2011/10/09/2203712.html

前面的文章中我提到过需要Finalize的对象在最终释放前会有一 次复活,我们大概可以猜到第二个参数表示的意思了。如果我们第二个参数给false,这个弱引用就是一个short weak reference(短弱引用),当GC回收时,发现没有这个对象的引用了,就认为这个对象无用,这时短弱引用对这个对象的跟踪到此为止,弱引用的 Target被设置为null。前面的一个参数的构造函数版本新建的弱引用为短弱引用。如果第二个参数给true,这个弱引用就是一个long weak reference(长弱引用)。在对象的Finalize方法没有被执行以前,Target都可用。不过这是对象的某些成员变量也许已经被回收,所以使 用起来要想当小心。
现在让我们看看WeakReference是如何实现的。很显然WeakReference不能直接的引用目标对象,WeakReference的 Target属性的get/set是两个函数,从某处查到目标对象的引用返回,而不是我们最常用写的那样直接返回或者设置一个私有变量。GC维护了两个列 表来跟踪两种弱引用的目标对象,在一个 WeakReference对象创建时,它在相应的列表中找到一个位置,将目标对象的引用放入,很显然,这两个列表不是根的一部分。在GC进行内存回收的 时候,如果要回收某一个对象,会检查弱引用的列表,如果保存着这个对象的引用,则将其设为null。 

目录
相关文章
|
1月前
|
Java
【JVM】深入理解Java引用类型:强引用、软引用、弱引用和虚引用
【JVM】深入理解Java引用类型:强引用、软引用、弱引用和虚引用
99 0
|
7月前
|
缓存 Java 程序员
Java 中的强引用、弱引用、软引用和虚引用
引用方式内存不足时垃圾回收机制启动时其余情况强引用否否否软引用是否否弱引用是是否虚引用可能可能可能在一般的程序中,弱引用和虚引用很少会被用到,强引用天天都在用就不必我说了,在有些情况下(如资源文件很大,但并不是全部要在同一时刻使用)我们会使用软引用来代替原来的强引用,一是可以避免某些情况下产生的 OOM,此外,它可以减少程序使用的内存,加速程序的运行。
70 1
|
3月前
|
缓存 Java 程序员
Java垃圾回收: 什么是强引用、软引用、弱引用和虚引用?
Java垃圾回收: 什么是强引用、软引用、弱引用和虚引用?
33 2
|
9月前
|
Java
强引用、软引用、弱引用、虚引用的区别?
强引用、软引用、弱引用、虚引用的区别?
66 0
|
9月前
|
算法 Java C++
14-理解Java中的不同引用类型:强引用、软引用、弱引用和虚引用
这篇文章将深入探讨Java中的四种引用类型:强引用、软引用、弱引用和虚引用。我们将逐一解释每种引用类型的特性和用途。
43 0
14-理解Java中的不同引用类型:强引用、软引用、弱引用和虚引用
|
9月前
|
Java
JVM学习日志(八) 强引用,软引用,弱引用,虚引用
强引用,软引用,弱引用,虚引用 简述
65 0
JVM学习日志(八) 强引用,软引用,弱引用,虚引用
|
10月前
|
Java C++
Java引用类型:强引用,软引用,弱引用,虚引用
Java引用类型:强引用,软引用,弱引用,虚引用
57 0
|
算法 Java
java中的强引用、软引用、弱引用、虚引用
java中将引用类型分为强引用、软引用、弱引用、虚引用。之所以要这么划分,还是为了GC时更好的对对象进行处理。因为jvm已经明确了各种引用的GC方式,所以谈四种引用最好是和GC一起聊才会有意义(个人愚见)。
118 0
|
缓存 Java
强引用、软引用、弱引用、虚引用有什么区别?
本文主要介绍强引用、软引用、弱引用、虚引用
153 0
|
缓存 Java
强引用,软引用,弱引用,幻象引用有什么区别?
强引用,软引用,弱引用,幻象引用有什么区别?
116 0
强引用,软引用,弱引用,幻象引用有什么区别?