2010-01-23 71 views

回答

10

否。在這方面,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的內存。 –