是否有最大值您可以将Xmx设置为?我把它设置为1024米,eclipse打开正常。当我将其设置为1024以上时,eclipse不会打开,我收到错误“jvm已终止。退出代码= -1”...
我这样做是因为我不断收到“java.lang.OutOfMemoryError:Java堆空间”。我正在读取一个35.5Mb .txt文件,当它只是使用“while((line = reader.readLine()) != null)
”循环读取文件时会发生此错误。我原本以为1024mb就足够了。任何人都可以帮助我吗?
答案 0 :(得分:33)
是的,有一个最大值,但它取决于系统。尝试看看,加倍,直到你达到极限,然后搜索下来。至少对于Linux上的Sun JRE 1.6,如果不总是提供信息性的错误消息(peregrino是运行32位ubuntu和2G RAM并且没有交换的上网本),那么你会感兴趣:
peregrino:$ java -Xmx4096M -cp bin WheelPrimes
Invalid maximum heap size: -Xmx4096M
The specified size exceeds the maximum representable size.
Could not create the Java virtual machine.
peregrino:$ java -Xmx4095M -cp bin WheelPrimes
Error occurred during initialization of VM
Incompatible minimum and maximum heap sizes specified
peregrino:$ java -Xmx4092M -cp bin WheelPrimes
Error occurred during initialization of VM
The size of the object heap + VM data exceeds the maximum representable size
peregrino:$ java -Xmx4000M -cp bin WheelPrimes
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
(experiment reducing from 4000M until)
peregrino:$ java -Xmx2686M -cp bin WheelPrimes
(normal execution)
大多数都是自我解释的,除了-Xmx4095M这是相当奇怪的(可能是签名/未签名的比较?),并声称在没有交换的2GB机器上保留2686M。但它确实提示,对于32位虚拟机,最大大小为4G而不是2G,如果操作系统允许您解决这么多问题。
答案 1 :(得分:5)
我认为32位JVM最大内存为2GB。但这可能已经过时了。如果我理解正确,你在Eclipse启动器上设置-Xmx。如果要增加从Eclipse运行的程序的内存,则应在“运行 - >运行配置...”中定义-Xmx(选择您的类并打开Arguments选项卡将其放入VM参数区域)菜单,而不是Eclipse启动
编辑:您要求的详细信息。 在Eclipse 3.4中
运行 - >运行配置...
如果您的类未在“Java Application”子树的左侧列表中列出,请单击左上角的“New Launch configuration”
在右侧,“主要”标签确保项目和班级是正确的
选择右侧的“参数”选项卡。
这个有两个文本区域。一个用于程序参数,该参数进入提供给main方法的args []数组。另一个用于VM参数。使用VM参数(下面的一个iirc)放入以下内容:
-Xmx2048m
我认为1024米应该足以满足您的需求!
单击“应用”,然后单击“运行”
应该工作:)
答案 2 :(得分:1)
在设置java堆时,请查看this中的一些常见错误。您可能已将堆大小设置为比计算机的物理内存更大的值。
您应该通过增加堆大小来避免解决此问题。相反,您应该分析您的应用程序,以查看您在哪里花费如此大量的内存。
答案 3 :(得分:1)
我认为它大约是2GB。虽然Pete Kirkham的回答非常有趣并且可能有道理,但我已经分配了3GB以上而没有错误,但实际上并没有使用3GB。这可以解释为什么你能够在没有交换空间的情况下在2GB RAM上分配2.5 GB。实际上,它没有使用2.5GB。