2012-04-22 27 views
1

使用:-Xms1000M -Xmx4000M -mx1000m 我仍然收到java.lang.OutOfMemoryError:Java堆空间基于Java的OutOfMemoryError与-Xms1000M -Xmx4000M -mx1000m

如果我试图提高这些数字,我得到以下的JVM错误:

Error occurred during initialization of VM

Could not reserve enough space for object heap

Could not create the Java virtual machine.

我该如何解决这个OutOfMemoryError问题? (即使我需要在磁盘上缓存内存)

+6

你在做什么来导致OoM错误? – Makoto 2012-04-22 00:05:50

+0

您可能在某处存在内存泄漏。使用探查器来确定。 – 2012-04-22 00:06:53

+0

我只是使用jai-imageio库来读取一个100Mb的JPEG2000文件。 – 2012-04-22 00:12:01

回答

4

您的系统有多少内存?你在跑窗户吗?使用32位Windows JVM不能创建超过1G的堆。如果您的Xms设置大于此限制,JVM将无法初始化。

JPEG图像被压缩。一个100M的JPEG非常大,一旦由图像io lib解压缩,将会大得多。与1G堆的OOM是可想而知的。

Barry

+0

是的,它是一个32位的窗口;有没有办法告诉JVM使用堆内存文件,而不是内存(即使在32位窗口中也能增加堆空间)? – 2012-04-22 01:47:46

+1

您可以交换空间,但32位系统上的堆大小限制在1.2到1.5 GB左右。在理论上,您可以在32位系统上访问的最多是4 GB(即2^32),Windows的限制为3.5 GB。你可以得到的连续内存限制了堆的大小。顺便说一句:如果你超过你的物理内存,你的程序将减慢10倍或更多。 – 2012-04-22 09:48:14