所以我在我的一些代码中追踪我认为过度的 GC。我最终将其归结为这段代码,显示了我所看到的内容:object[] ret = new object[40000000];for (int i = 0; i < 40000000; i++){ ret[i] = new object();}在运行该循环时,我看到了数十个 Garbage Collection Gen1 事件。有没有人很好地理解这是为什么?在填充这个数组时,它清理了哪些不再被引用的对象?这是更多参考图片:https : //imgur.com/a/z3PBtou在我丢失对我创建的对象的引用之前,我不希望发生任何 GC。也许我今天脑子进水了,或者我遗漏了一些基本概念,但这对我来说似乎很好奇。谢谢!
1 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
仅仅因为它运行了 gen1 并不意味着它收集了任何东西——这意味着它尝试了(正是因为你分配了很多对象!)。它不知道,直到它尝试,它是否会成功。
在我丢失对我创建的对象的引用之前,我不希望发生任何 GC。
不; GC收集无法访问的对象,但它会在合适的时候运行(例如,基于分配 - 或由于来自操作系统的外部内存压力)。
- 1 回答
- 0 关注
- 135 浏览
添加回答
举报
0/150
提交
取消