积极答复者
垃圾回收内存管理

问题
-
我看视频上那个老师数执行五次,clr第0代内存256k被占满就执行垃圾回收,可是我怎么执行了九次类A才开始被释放?是不是因为visual studio或是.net framework版本不同原因?
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 析构 { class Program { static void Main(string[] args) { for (string s = ""; s != "end"; Console.ReadLine()) { new A(); for (int i = 0; i < 50; i++) { byte[] b = new byte[1000]; } } } } class A { public A() { Console.WriteLine("类A被创建了"); } ~ A() { Console.WriteLine("类A被释放了"); } } }
答案
-
你好,
这个GC的行事风格还是很难揣测的,哈哈...
通常情况下,GC为0代分配的大小是256K不假,但这是不确定的,和GC Flavor有关。
甚至于GC中0代对象空间大小不是一成不变的,GC自己调节,如果每次0代回收可以回收很多空间,0代堆的大小会被减小,使得GC频率增加,每次回收使用更少的时间。
MSDN有篇博客可供参考:
如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
立刻免费下载 MSDN 论坛好帮手
- 已建议为答案 Charles Shao 2011年3月15日 2:24
- 已标记为答案 lenovoww 2011年3月15日 11:16
全部回复
-
你好,
这个GC的行事风格还是很难揣测的,哈哈...
通常情况下,GC为0代分配的大小是256K不假,但这是不确定的,和GC Flavor有关。
甚至于GC中0代对象空间大小不是一成不变的,GC自己调节,如果每次0代回收可以回收很多空间,0代堆的大小会被减小,使得GC频率增加,每次回收使用更少的时间。
MSDN有篇博客可供参考:
如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
立刻免费下载 MSDN 论坛好帮手
- 已建议为答案 Charles Shao 2011年3月15日 2:24
- 已标记为答案 lenovoww 2011年3月15日 11:16