有没有办法在 .NET 运行时预分配堆,比如 Java 中的 -Xmx/-Xms?

Posted

技术标签:

【中文标题】有没有办法在 .NET 运行时预分配堆,比如 Java 中的 -Xmx/-Xms?【英文标题】:Is there any way to pre-allocate the heap in the .NET runtime, like -Xmx/-Xms in Java? 【发布时间】:2011-01-15 05:48:57 【问题描述】:

在大多数平台和大多数 JVM 上,您可以通过将 -Xmx 和 -Xms 选项(或其变体)设置为相同大小来在启动时预先分配堆。

是否可以对 .NET 做同样的事情,如果可以,如何做?

【问题讨论】:

出于兴趣,您为什么要这样做?在我开始使用 java 之前,我是一名 .net 开发人员,在那段时间里,我从来没有想过它是垃圾收集器。现在我是一名 Java 开发人员,我经常需要在不同的 -Xmx-XX:MaxPermSize 设置之间进行调整,以保持事情顺利进行并发现它真的很痛苦。 在规划服务器容量时最好有一个已知的最大限制。我提出这个问题的原因与 devOps 完全相反,我需要为服务器规划/预测内存,尤其是当我们在其中运行多个进程时。 【参考方案1】:

很遗憾,它不是,.NET 运行时会为您做出有关堆大小和相对代大小的所有决定。

您唯一能做的就是在垃圾收集器的服务器版本和工作站版本之间切换。这提供了更积极的方式,在服务器版本中每个核心收集一个 GC,并在工作站中保持应用程序响应的偏好。

【讨论】:

谢谢。哪个 GC 是默认的,您如何配置不同的 GC? 工作站是默认设置。您可以通过在配置中添加几行代码来切换到服务器版本:blogs.msdn.com/junfeng/archive/2004/07/13/181534.aspx。如果您有进程资源管理器,则可以通过查找加载的 mscorwks.dll(工作站)或 mscorsvr.dll(服务器)来查看正在使用的进程

以上是关于有没有办法在 .NET 运行时预分配堆,比如 Java 中的 -Xmx/-Xms?的主要内容,如果未能解决你的问题,请参考以下文章

自定义堆/内存分配范围

java内存分配分析/栈内存堆内存

如何查看给定 .NET 应用程序中的内存分配?

如何查看给定 .NET 应用程序中的内存分配?

JVM 运行时内存空间详解——堆

JAVA堆内存和栈内存初步了解