c#为虚拟机分配内存

问题描述:

C#是否具有相当于Java的-Xmx1024m开关,允许您增加虚拟机的内存分配?c#为虚拟机分配内存

否。在这方面,CLR处理内存分配的方式与java非常不同。它将继续增加堆大小,没有上限(除了架构限制)。

在一个64位操作系统上,在定位x64的同时,CLR将继续允许进程分配内存直至系统中可用的内存总量。过程中没有固定的上限。

在32位系统上,或者在定位x86时,实际上限一般在1.2到1.6 GB之间。此时,您将开始遇到内存不足异常。 (理论上,应该使用2GB,但CLR本身占用了一些空间,并且它的方式处理内存寻址导致发生在这个范围内的内存不足错误,而不是。)


编辑:这是一个很好的描述differences in how memory is handled in the JVM and the CLR的文章。我相信JVM需要使用-Xmx的主要原因是因为它不会将内存释放回操作系统。因此它提供了一种限制程序内存消耗的方法。

+1

即使您的总地址空间可能更大,即使在x64上,您也只能限制在2 GB Heap上,只需一次添加即可:http://blogs.msdn.com/joshwil/archive/2005/08/10 /450202.aspx –

+1

@Michael Stum:这对于单个对象来说是2GB,而不是堆。他指的是,如果数组的总大小会使对象大于2GB,则无法分配大量的结构。我用C#编写软件,经常在堆上使用大大超过2GB的内存。 –