垃圾回收系列CLR与JVM垃圾回收器的比较.docxVIP

垃圾回收系列CLR与JVM垃圾回收器的比较.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
垃圾回收系列CLR与JVM垃圾回收器的比较

 HYPERLINK http://terrylee.me/blog/post/2010/10/11/garbage-collection-and-performance-part3.aspx 垃圾回收系列(3):CLR与JVM垃圾回收器的比较 发布者: HYPERLINK http://terrylee.me/blog/author/TerryLee.aspx TerryLee | 分类: HYPERLINK http://terrylee.me/blog/category/NETe6a186e69eb6.aspx .NET框架 |  HYPERLINK http://terrylee.me/blog/category/Javae68a80e69caf.aspx Java技术 |  HYPERLINK http://terrylee.me/blog/category/e8aea1e7ae97e69cbae7a791e5ada6.aspx 计算机科学 本文为垃圾回收讲座的第三篇,在前面两篇( HYPERLINK http://terrylee.me/blog/post/2010/09/25/garbage-collection-and-performance-part1.aspx 一、 HYPERLINK http://terrylee.me/blog/post/2010/09/26/garbage-collection-and-performance-part2.aspx 二)文章里介绍了手工管理内存带来的一些问题,以及一些经典的GC算法。本文我们主要关注微软的CLR与JVM垃圾回收器方面的比较。我们知道CLR和JVM都采用了分代式垃圾回收器,而分代式垃圾回收器则基于以下几点假设: 1. 对象越新,其生存期就越短 2. 对象越老,其生存期就越长 3. 对堆的一部分执行GC比对整个堆执行GC要快 CLR和JVM尽管都采用了分代式垃圾回收器,但是它们在很多处理方面都有些不同:分代机制,大对象堆,回收模式,回收算法,寻找存活对象效率等。 分代机制 在CLR中,对象按年龄可以分为三代:第0代、第1代、第2代,如下图所示: ? 在这三代之间,对象代的提升过程,大家可以参考《 HYPERLINK /subject/4924165/ CLR via C#》,里面有比较详细的介绍。 JVM中对于对象的分代式新生代和旧生代: 回收模式 在CLR4.0之前,提供三种不同的垃圾回收模式:工作站并发GC、工作站非并发GC以及服务器GC,如下图所示: 工作站非并发GC模式,没有专门的GC线程,而是由工作线程负责回收,在回收过程中,需要暂时挂起应用程序,回收结束后应用程序继续运行,所以在回收过程中会有应用程序暂停现象: 工作站并发GC模式,为了解决在执行垃圾回收时引起的应用程序暂停问题,会有一个专门的GC线程负责垃圾回收,大多数时间垃圾回收都可以应用程序并发执行,但是仅仅是针对Full GC,而对于第0代、第1代对象,仍然会使用非并发模式执行,并发垃圾回收本质上牺牲了更多的CPU时间和内存来换取应用程序暂停时间的减小: ? ? ? 服务器GC模式运行在多CPU服务器上,如果在单CPU机器上配置了使用服务器GC,不会起任何作用,垃圾回收仍然会使用工作站非并发模式执行。服务器GC模式为每个CPU分配一个专用的垃圾回收线程和一个托管堆,并且该垃圾回收线程具有较高的优先级,在执行垃圾回收期间,应用程序工作线程会暂时挂起: CLR 4.0中提供了后台垃圾回收机制,用于取代并发GC。 JVM(以Hotspot为例)中使用的垃圾回收更为复杂,针对新生代、旧生代在工作站和服务器上,分别使用不同的垃圾回收模式,如下图所示: 在Client端默认的方式为串行GC,而在服务端,对于新生代和旧生代默认的方式分别为:并行回收GC和并行GC: 下图体现了默认串行GC与并行GC之前的区别,并行GC会把堆分成多个区,分区进行标记和回收,但这两种方式都会引起应用程序的暂停: 下图体现了默认的标记缩并回收与并发GC,在并发GC中,标记的总共分为三个阶段,分别为:Initial Mark、Concurrent Marking和Remark,只有在Initial Mark和Remark阶段才会引起应用程序暂停,而在Concurrent Marking和清除阶段都是与应用程序并发执行,并不会引起暂停: 回收算法 在CLR中有专门的大对象堆(LOH),超过85000字节的对象将会分配在LOH上面,只有在进行第2代对象垃圾回收时才会同时对LOH进行回收,即一次Full GC。第0代、第1代、第2代对象所在的堆称之为小对象堆(SOH)。 在CLR

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档