.Net 垃圾回收机制
Mark-Compact 标记压缩算法
代
托管代码/非托管代码
弱引用(Weak References
弱引用(weak reference)可以保持对对象的引用,同时允许垃圾收集器在它认为适当的垃圾收集时间释放对象,回收内存。假设有一个对象创建相对便宜,但需耗费大量的内存,如果希望保持这个对象,在应用程序需要使用它,但也希望能够告诉垃圾收集器,在必要时把内存收回。
总的来说,我们能够提升GC表现的方式有:
1. 清理工作。不要让资源一直打开!尽可能地保证关闭所有打开的连接,清除所有非托管的资源。当使用非托管对象时,初始化工作尽量完些,清理工作要尽量及时点。
2. 不要过度地引用。需要时才使用引用对象,记住,如果你的对象是活动着的,所有被它引用的对象都不会被垃圾回收。当我们想清理一些类所引用的事物,可以通过将这些引用设置为null来移除它们。我喜欢采用的一种方式是将未使用的引用指向一个轻量级的NullObject来避免产生null引用的异常。在GC进行垃圾回收时,更少的引用将减少映射处理的压力。
3. 少使用finalizer。Finalizer在垃圾回收时是非常昂贵的资源,我们应该只在必要时使用。如果我们使用IDisposable来代替finalizer会更高效些,因为我们的对象能够直接被GC回收而不是在第二次回收时进行。
4. 尽量保持对象和它们的子对象在一块儿。GC在复制大块内存数据来放到一起时是很容易的,而复制堆中的碎片是很费劲的,所以当我们声明一个包含许多其他对象的对象时,我们应该在初始化时尽量让他们在一块儿。
5. 最后,使用静态方法来保持对象的轻便也是可行的。
http://www.cnblogs.com/mirobright/archive/2009/11/21/1607773.html
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。