我在这里看到了这些图表:http: //msdn.microsoft.com/en-us/library/ee787088.aspx 好几年了,我以为我理解了它们。但是当我试图想象发生了什么时线程实际上我不能..
可以说 - 当 GC 不是在专用线程上而是在触发 GC 的线程上运行时。
查看名为“垃圾收集期间发生的情况”的部分。
查看红色箭头 - 这应该是在用户线程上运行的 GC。
因此,假设我有一个在线程中运行的工作方法,并且该工作人员运行一个循环。然后在某个时间点 GC kciks in..
我的问题是——当 GC 开始然后结束时,我的线程到底会发生什么。
- 会有上下文切换吗?
- 是否会分配新的线程上下文并加载新的堆栈以供 GC 运行?
- GC 代码究竟是如何在别人的线程中执行的(对我来说最令人费解)......线程分配了堆栈并加载了代码.. GC 代码是如何执行的 - 我什至无法想象这件作品。