简单说一下.net和mono的gc不同

.net和mono关系

  
  .Net Framework是微软的跨平台(微软自家的,Windows phone等),如今已经推出.Net Standard 2.0 API(预览版).
  mono虽然是.Net Framework的一种更大跨平台实现,在垃圾回收机制(gc)是有很大的不同.mono也已经开始支持.Net Standard API.
  .Net Core是微软推出开源完全跨平台的.很大程度的继承.Net Framework优秀的特性.性能也是极高的.适合做服务端程序,除微软之外,有谷歌和三星,及Red Hat等大公司支持.和mono一样都归属于.Net基金会.
  三者的关系,并不是谁代替谁,只是相互补充.如果对原有项目进行跨平台还是优先使用mono,移动端也是如此,新项目服务端的,可以用.Net Core.

.Net Framework 和 .Net Core的GC简绍

object o = 5;
Console.WriteLine("o is {0} generation",GC.GetGeneration(o));  		    //o在gc中为第一代

object largerObject = new byte[85000];  
Console.WriteLine("largerobject is {0}",GC.GetGeneration(largerObject));   //largerObject在gc中为第二代

Console.WriteLine("max generation is {0}",GC.MaxGeneration);   	           //net netcore 在gc中分为3代, 0代 1代 2代

运行效果图


mono的gc介绍

//垃圾回收
//mono垃圾回收机制分为2代 为0代和1代 大对象是直接分配在1代
int i = 5;
Console.WriteLine(GC.GetGeneration((object)i));

object o = new byte[8001];
Console.WriteLine(GC.GetGeneration(o));  //显示1 为1代
Console.WriteLine(GC.MaxGeneration);

运行效果图

mono的代数

mono与.Net Framework的gc不同

  1. .Net Framework垃圾回收机制分为3代,而Mono则分为2代
  2. 大对象都是分配在最高的一代中,.Net Framework大对象为85000(不是很精确,本人测试为84987分配0代中,大于84987字节的分配在2代中)字节;
  3. Mono大对象为超过8000,就会分配在1代中,这一点说Mono在移动端还是很合适的.
秋风 2017-04-09