我有一個內存飢餓的java應用程序。 在我使用Windows XP Professional的32位系統上,應用程序運行良好,如果我給它-Xmx1280m
。以下所有內容都將以java.lang.OutOfMemoryError: Java heap space
例外結束。32位進程在64位系統上運行時是否需要更多內存?
如果我在64位Windows XP Professional上運行相同的應用程序(其他一切完全相同),則需要使用-Xms1400m
來防止OutOfMemory條件。
據我的理解,如果我有一個C程序,並且我將它編譯爲32位和64位,那麼64位版本將需要更多的內存,因爲指針更寬等等。 然而,在我的Java例子中,虛擬機(Sun)是相同的,字節碼是相同的。
爲什麼64位機器需要更多內存?
這在.NET上更爲明顯,因爲它有一個IntPtr類,它代表一個指針...當在32位模式下運行時爲4個字節,在64位模式下爲8個字節。 – Powerlord 2009-07-01 20:20:21
嗯,如果它確實不同於64位,我預計它可以解決超過2 GB,但它不能。 -Xmx1400m是java在64位機器上接受的最大值。似乎我只得到了缺點(內存膨脹),但沒有優勢(更大的進程地址空間)。 – 2009-07-01 20:37:21