- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
浅析.NET的垃圾回收机制
摘要:.NET Framework中的垃圾回收(Garbage Collection)机制减少了一些应用程序中发生内存泄露和访问冲突的可能性,但GC的工作机制仍然存在问题。在程序开发中,总会发现对于GC的错误理解。文章针对此问题进行研究分析,简要说明内存垃圾的产生原因、垃圾回收机制的原理、垃圾回收的主要对象以及释放模式。
关键词:内存管理;托管堆;垃圾回收;释放模式;终结器
中图分类号:TP311 文献标识码:A文章编号:1009-3044(2008)34-1989-03
Analyst of the Garbage Collection System of .NET
SHI Jun, LI Yan-hui
(Computer Science and Technology Department, Yangzhou Vocational College of Environment Resources, Yangzhou 225127, China)
Abstract: The garbage collection (GC) system of .NET Framework is to reduce the possibility of memory leak and access violation from some application programs, but the problem still exists because of the working system of the GC. It is always found the GC to be misunderstood during the program development. Based on the analysis of this problem, this article is going to explain briefly the root cause of memory garbage, the theory of the garbage collection system, its main objective and release mode.
Key words: memory management; managed heap; garbage collection; release mode; finalizer
1 引言
我们可能都碰到过程序莫名奇妙的崩溃、或内存使用不停上涨。对于前者,常见的有资源管理器突然崩溃,机器突然发生蓝屏;对于后者,你可能会发现有些进程的内存持续暴涨,直到计算机无法使用,这时不得不重启计算机,这就是常见的访问冲突和内存泄漏。
相对于C++程序员来说,C#程序员非常幸运,至少不要为内存泄漏而头疼,不需要负责内存的分配和回收。不少程序员都会有这样的疑惑:内存分配和释放由.NET Framework进行,但能保证内存的有效使用吗?能够保证程序的运行效率吗?
2 垃圾回收机制
在.NET Framework中,内存中的资源分为托管资源和非托管资源。托管资源必须接受CLR(公共语言运行库)的管理,分别存放在两种地方:堆栈和托管堆;规则是,所有的值类型(包括引用和对象实例)和引用类型的引用都存放在堆栈中,而所有引用所代表的对象实例都保存在托管堆中。而非托管资源则不必接受CLR的管理。
内存管理就是对象的分配和释放问题。在传统的Win32编程中,对于资源对象的访问方式是:
1) 声明对象并分配内存;
2) 使用对象;
3) 销毁对象并释放内存。
上面的每一步,可能都存在陷阱。可能内存不够用,导致下面的代码调试失败;可能要访问的对象,指向了一个虚无缥缈的地址空间;可能编程人员忘记了释放内存,会发生内存泄漏,也有一些编程人员试图访问已经被释放的内存,那么也会发生访问冲突。我们以前使用的C++语言或其它语言,它们的对象是创建在非托管堆之上的。对于非托管编程来说,Bug发生的时间和次序都难以预测,所以对应用程序来说,它们所带来的危害,远远超过了其他大多数的Bug,这使得应用程序的运行结果变得不可预测。
在.NET Framework中,对象是创建在托管堆之上的,上述的一切问题,在托管堆编程中,这种情况得到了极大的改善,回收内存的工作不需要再用编程人员区操心了。.NET提供了一种自动垃圾回收机制,这就是Garbage Collection(简称GC)。垃圾回收器管理着应用程序的内存分配和释放。每次使用new运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空
您可能关注的文档
最近下载
- 写给班主任的三十条建议.docx VIP
- 核反应堆设计软件:RELAP5二次开发_(17).RELAP5接口开发与数据交换.docx VIP
- 3.1网络改变世界 课件 2025-2026学年统编版道德与法治八年级上册.pptx VIP
- 三维超声评价子宫内膜容受性.pdf VIP
- 公基础知识(陕西省省情).pdf VIP
- (2025秋新版)二年级上册道德与法治全册教案.docx
- Viaton外研通单词机VT-D10使用指南.pdf
- 学校超市经营方案(完整).doc VIP
- 2024年秋季人教版七年级上册语文全册教学课件(考点精讲版).pptx
- 成都盒马鲜生末端物流配送管理与路径优化研究.doc VIP
文档评论(0)