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