A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ♠Akechi♠ 中级黑马   /  2014-3-23 11:33  /  1312 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ♠Akechi♠ 于 2014-3-23 15:49 编辑

所谓内存泄漏就是指一个不再被程序使用的对象或变量一直被占据在内存中。.Net中有回收机制,它可以保证一对象不再被引用的时候,对象将自动被垃圾回收器(GC)从内存中清除掉。虽然.Net可以回收无用的对象,但是.Net仍然存在由于使用不当导致的内存泄漏问题。.Net中的内存泄漏的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是.Net中内存泄漏的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是.Net中的内存泄漏情况。例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局Dictionary对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。

如果使用弱引用,那么即使被引用也可以被回收,请问下如何弱引用呢

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

3 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
防止内存泄露。

  Object obj=new Object();

  当你在通过异步的形式访问网络上面的资源的时候,需要的时间可能会比较长,在数据返回之前,用户很可能转向了其他的页面,如果异步访问的对象(obj)对本地的一个对象(Object)是强引用的话,那么在这个异步访问对象(obj)被释放之前,也即在数据被回调之前,这个被引用的对象(Object)是不会被销毁的,这样一来,就导致内存一直被占用。

  WeakReference weakObj=new WeakReference(Object);

  此时就可以使用弱引用,弱引用对象(weakObj)发出异步请求,在回调之前,如果用户要转到其他的页面,这个被引用的对象(Object)是可以被释放的,这样子就不会出现内存一直被占用的现象。

  弱引用类: WeakReference //有两个重载的构造函数
  WeakReference WeakObj=new WeakReference(Object);//弱引用方式
  IsAlive属性是判断此弱引用对象所引用的对象是否还存在,存在:IsAlive=True;
     Target属性是设置该弱引用对象所引用的数据对象的值。

找到答案了,自己学习了

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
涨姿势了。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马