47

有最大值吗?您可以将 Xmx 设置为的大小?我将它设置为 1024m 并且 Eclipse 可以正常打开。当我将其设置为 1024 以上时,eclipse 无法打开,并且出现错误“jvm 已终止。退出代码=-1”...

我这样做是因为我不断收到“java.lang.OutOfMemoryError:Java 堆空间”。我正在读取一个 35.5Mb 的 .txt 文件,当它只是使用“ while((line = reader.readLine()) != null)”循环读取文件时会发生此错误。我原以为1024mb就足够了。谁能帮我?

4

4 回答 4

35

是的,有一个最大值,但它取决于系统。试试看,加倍直到达到极限,然后向下搜索。至少对于 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 位 VM 的最大大小是 4G 而不是 2G,如果操作系统允许您处理那么多的话。

于 2009-01-20T13:35:14.247 回答
5

我认为 32 位 JVM 最多有 2GB 内存。不过这可能已经过时了。如果我理解正确,您可以在 Eclipse 启动器上设置 -Xmx。如果您想增加从 Eclipse 运行的程序的内存,您应该在“运行->运行配置...”中定义 -Xmx(选择您的类并打开“参数”选项卡,将其放在 VM 参数区域)菜单, 而不是在 Eclipse 启动时

编辑:您要求的详细信息。在 Eclipse 3.4 中

  1. 运行->运行配置...

  2. 如果你的类没有在“Java Application”子树左侧的列表中列出,点击左上角的“New Launch configuration”

  3. 在右侧,“Main”选项卡确保项目和类是正确的

  4. 选择右侧的“参数”选项卡。这个有两个文本区域。一个是用于进入提供给您的 main 方法的 args[] 数组的程序参数。另一个用于 VM 参数。将以下内容放入带有VM参数(较低的一个iirc)的那个:
    -Xmx2048m

    我认为 1024m 应该足以满足您的需求!

  5. 单击应用,然后单击运行

  6. 应该管用 :)

于 2009-01-20T13:27:26.180 回答
1

我认为它大约是2GB。虽然 Pete Kirkham 的回答非常有趣并且可能是正确的,但我已经毫无错误地分配了 3GB 以上的空间,但实际上它并没有使用 3GB。这或许可以解释为什么您能够在没有交换空间的情况下在 2GB RAM 上分配 2.5GB。实际上,它没有使用 2.5GB。

于 2010-01-19T21:43:22.770 回答
1

看看这个关于设置 java 堆的一些常见错误。您可能已将堆大小设置为大于计算机物理内存的值。

您应该通过增加堆大小来避免解决此问题。相反,您应该分析您的应用程序以查看您在哪里花费了如此大量的内存。

于 2009-01-20T13:27:56.540 回答