.NET的垃圾回收器是用一种叫代的原理,假设以下三种情况成立,则提出了代的概念。

  • 越是新的对象,他的生存周期就越短
  • 越是老得对象,它的生存周期就越长
  • 回收一部分堆对象比回收全部堆对象性能高

第一步:当声明A-E 五个对象,它们在堆栈的分配情况(垃圾回收机制没有扫描之前),稍后,C和E对象变的不可达

.NET垃圾回收机制-代(generation)的原理分析

第二步:当CLR初始化时,它为第零代分配了256K的空间(可能不同),代越高分配的内存越多。假设A-E分配了占用完了256k的内存,当F对象又被声明时,回收器就会进行第零代回收,C和E被回收,A,B,D被提升到一代。

.NET垃圾回收机制-代(generation)的原理分析

第三步:F-K对象被分配到第零代,稍后,B,H和J变的不可达。如图,

.NET垃圾回收机制-代(generation)的原理分析

第四步:但是垃圾回收器会检查第一代的空间,如果还足够,就会忽略第一代的回收,只回收第0代的。

.NET垃圾回收机制-代(generation)的原理分析

第五步:继续申请L-O,同时,随着应用程序的运行G,L,M不可达,如图:

.NET垃圾回收机制-代(generation)的原理分析

第六步:如果再继续申请P,此时如果第0代空间不足但是第1代的空间足,此时继续只回收第0代,忽略第1代,垃圾回收器回收以后:

.NET垃圾回收机制-代(generation)的原理分析

第七步:并且继续分配P到S对象的空间:

.NET垃圾回收机制-代(generation)的原理分析

第八步:当在分配T对象时,垃圾回收期扫描第一代和第零代,发现空间不足,此时,会启动垃圾回收第一代和第零代的空间:此时第0代的对象升至第1代,第1代的对象升至第2代。

.NET垃圾回收机制-代(generation)的原理分析

垃圾回收机制仅有3代,当CLR初始化时,为第0代分配大约256K空间,第1代大约2M,第2代大约10M,基于这种假设才能提高应用程序的性能,要知道垃圾回收机制很影响性能的。

结果:

.NET垃圾回收机制-代(generation)的原理分析

相关文章:

  • 2022-12-23
  • 2021-09-07
  • 2021-08-28
  • 2021-06-29
  • 2022-02-01
猜你喜欢
  • 2021-10-07
  • 2021-07-31
  • 2022-02-26
  • 2022-01-26
  • 2021-12-04
  • 2021-07-21
相关资源
相似解决方案