企业录,供求信息免费发布平台
 
  首 页 企业名录 产品大全 商业机会 企业建站 我的办公室
手机站
企业库
您当前位置是:商业机会 >> 商务服务 >> 软件开发 >> .net的弱引用是什么?
.net的弱引用是什么? .net的弱引用是什么?_西安达内科技_.net的弱引用是什么?

点此浏览大图
公 司: 西安达内科技
发布时间:2014年04月17日
有 效 期:2014年10月14日
留言询价 加为商友
  联系信息 企业信息
先生 (seo)
联系时,请说是在企业录看到的,谢谢!
电  话: 029-82222601
传  真:
手  机:
地  址: 中国陕西西安市陕西省西安市兴庆南路10号交大出版大厦6层
邮  编:
公司主页: http://xadnitpx.qy6.com.cn(加入收藏)
公 司:西安达内科技

查看该公司详细资料

详细说明

      .net的弱引用是什么?弱引用看起来很神奇,似乎是凌驾于正常的垃圾回收机制之上的,它究竟是如何实现的呢?其实WeakReference类型在内部封装了一个名为GCHandle的struct类型,正是这个GCHandle使弱引用成为可能。下面西安达内科技(www.xatarena.cn)培训讲师就详细为大家介绍。

  CLR中的每个AppDomain都拥有一个GC句柄表。这个表的每一项记录有两个信息,一个是指向堆中某个对象的指针,另一个是这个表项的类型。总共有4种表项类型,其中Weak和WeakTrackResurrection两种类型和我们今天所讨论的弱引用相关。GCHandle这个类提供了一些操纵GC句柄表的方法。我们可以使用它的Alloc方法向GC句柄表中添加一个指定类型的表项。当垃圾回收开始后,垃圾回收器找到所有可达对象(简单的说,就是有用的对象)。然后遍历GC句柄表中每个Weak类型的表项,如果发现某表项所指的对象不属于可达对象,则会把该表项的对象指针设置为null。紧接着,垃圾回收器会找出所有不可达对象中定义了析构函数的对象,并把他们放到一个被称为freachable的队列中(freachable中的对象会等待一个CLR中特定的线程来调用他们的终结函数)。由于这些freachable中的对象现在又被freachable队列所引用,所以它们又成为可达对象了。此时,垃圾回收器会遍历GC句柄表中所有WeakTrackResurrection类型的表项,和刚才一样,如果某表项所指的对象不属于可达对象,则会把该表项的对象指针设置为null。此处需注意,对于那些一开始被判定为不可达且定义了析构函数的对象来说,它们在GC句柄表中所对于的表项指针仍然不是null。这就是Weak和WeakTrackResurrection两种类型的区别。

  WeakReference就是通过表示了某个GC句柄表表项的GCHandle对象来完成跟踪对象生命周期的功能的。你也一定可以看出短弱引用利用了Weak类型的GC句柄表项,而长弱引用则利用了WeakTrackResurrection类型的表项。

  WeakReference的一些注意事项

  首先,WeakReference自身也实现了析构函数。也就是说,它即使不再被使用了,也不会被立即回收,而是会在内存里赖着多活一会(可能会经历不止一次的垃圾回收)。

  另外,如上一节所说,WeakReference会向GC句柄表添加一个表项。而每次垃圾回收,GC句柄表都会被遍历一遍。可想而知,如果系统中存在大量的WeakReference,那么GC句柄表很可能也会非常庞大,导致垃圾回收的效率降低。


免责声明:以上所展示的信息由会员自行提供,内容的真实性、准确性和合法性由发布会员负责,www.qy6.com.cn对此不承担任何责任。如有侵犯您的权益,请来信通知删除。
该公司其他商业信息
 1 直接到第
20 条信息,当前显示第 1 - 20 条,共 1

机械 仪器 五金 电子 电工 照明 汽摩 物流 包装 印刷 安防 环保 化工 精细化工 橡胶塑料 纺织 冶金 农业 健康保养 建材 能源 服装 工艺品 家居用品 数码 家用电器 通讯产品 办公 运动、休闲 食品 玩具 商务 广告 展会
1 2 3 4 5 6 7 8 9 10 .. 联系人:张 电话:029-82222601

关于我们 | 网站指南 | 广告服务 | 诚招代理 | 诚聘英才 | 付款方式 | (企业录)联系方式 | 友情链接 | 网站地图