.net - GC 是否暂停当前/所有进程?

标签 .net garbage-collection

Andrew Troelsen 在他的书中 Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition在解释来自 CLR 的 newobj 指令第 1 页时说道。 248,倒数第二段

Garbage collector temporarily suspends all active threads within the current process to ensure that the application does not access the heap during the collection process

如果 GC 暂停当前进程,那么如何确保所有进程以及当前进程都无法访问堆并避免对刚刚收集的对象进行任何处理(如果 GC 处理整个堆)或者 Andrew 只是为初学者总结了该过程?

最佳答案

这不是问题,每个进程都有自己的虚拟内存空间。因此它有自己的堆。另一个进程无法访问您的堆,Windows 在进程之间设置了一堵大墙,以确保一个出错的进程不会破坏另一个进程的稳定。

进程确实共享内存,但仅限于代码,而不是数据。 RAM 中只有一份 ngen 框架代码、CLR 和抖动副本,由执行托管代码的所有进程共享。与问题无关,内存不会被垃圾收集。

关于.net - GC 是否暂停当前/所有进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248323/

相关文章:

c# - 如何将 UTF-8 byte[] 转换为字符串

C#反编译器?

c# - 为什么静态类不能有非静态方法和变量?

命名空间的 .NET 命名约定

asp.net - 垃圾收集器 GEN 2 在哪些场景中进行清理

c# - 线程和垃圾收集

java - JVM 垃圾收集突然占用大量 CPU

c# - ASP.NET 与 SharePoint - 哪个更适合 Web 开发人员?

java - PSYoungGen 不是 "eden"、 "from"和 "to"的总和?

ruby - 检查点并恢复 Ruby 中的堆