据我了解,在 .NET 中,每个进程有一次 GC,每个进程有一个托管堆(它分为 SOH 和 LOH)。
所以我对此有几个问题:
如果我们在一个进程中有几个应用程序域,那么每个域将在其他域之间共享堆。安全吗?这种域之间的分离是如何进行的?
当 GC 开始工作时,它会暂停工作线程。因此,如果一个应用程序域需要频繁启动 GC,则会影响其他根本不需要垃圾回收的域。再说一次,域之间的 0、1、2 代是否有任何分离,或者来自存储在同一 0 代区域中的不同域的所有 0 代对象是否有任何分离?
为什么 GC 和托管堆是按进程而不是按域实现的?