什么是AppDomain?AppDomains的好处是什么?为什么微软带来了AppDomains的概念,没有AppDomains会出现什么问题?
请详细说明.
在与我的同事讨论期间,我怀疑.net中的垃圾收集器是在系统范围内还是在应用程序范围内工作.
意味着每个具有自己的GC的应用程序是否会影响系统性能?
我对此有点困惑.
是否有单个GC堆过程以这样的方式进行分区,即每个应用程序域都可以访问特定分区?或者每个应用程序域都有单独的GC堆?我确定其他堆如HF堆,LF堆,存根堆,处理表等等......所有这些堆都是为每个应用域分别分配的?GC堆也会单独分配吗?
这可能是正确的,因为除非对象可序列化或实现为MarshalByRef,否则无法在AppDomains之间传递对象.我在想是否有与每个对象关联的AppDomainID和Object Header(Sync Block)存储有关AppDomainID的信息?
据我了解,在 .NET 中,每个进程有一次 GC,每个进程有一个托管堆(它分为 SOH 和 LOH)。
所以我对此有几个问题:
如果我们在一个进程中有几个应用程序域,那么每个域将在其他域之间共享堆。安全吗?这种域之间的分离是如何进行的?
当 GC 开始工作时,它会暂停工作线程。因此,如果一个应用程序域需要频繁启动 GC,则会影响其他根本不需要垃圾回收的域。再说一次,域之间的 0、1、2 代是否有任何分离,或者来自存储在同一 0 代区域中的不同域的所有 0 代对象是否有任何分离?
为什么 GC 和托管堆是按进程而不是按域实现的?