假设我有 .Net 应用程序 App.exe,它创建了三个域:DomainA、DomainB 和 DomainC。
可以说CLR给App.exe进程分配了一定数量的物理内存,然后这个内存在我们三个域之间按一定比例分配吗?
或者对于每个新域,独立于为 App.exe 和其他域分配的内存分配一个新的单独的内存部分?
简而言之:我可以将逻辑内存分配想象成带有歌曲的(顺序)磁带(其中歌曲是 AppDomans),还是一种 FAT32,其中文件随机定位而我们只知道它们在磁盘上的位置?
最佳答案
Can we say that CLR assigns to App.exe process some amount of physical memory
你不能这么说,Windows 上的进程只分配虚拟内存。虚拟内存到物理内存 (RAM) 的映射严格来说是操作系统的职责。 RAM 需要由机器上运行的所有进程共享,并且是动态完成的。所有进程的虚拟内存分配的总和通常大大超过 RAM 的数量。当进程访问虚拟内存时,页面错误会将虚拟内存页面映射到 RAM。如有必要,RAM 中的数据将被丢弃或存储在分页文件中以腾出空间。
AppDomains 共享一组 GC 堆(第 0 代到第 2 代和大对象堆)并且它们的分配是混合的。它们由根分开,每个 AppDomain 都有自己的静态变量堆、自己的 GCHandles 和自己的带有局部变量的线程堆栈帧集。
关于.net - 进程内存v.s. AppDomain 内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18531263/