在尝试增加 jvm 内存时,是否可以将 Xmx 设置为最大数量?

2022-08-31 22:34:04

是否有可以将 Xmx 设置为的最大大小?我把它设置为1024m,日食打开正常。当我将其设置为1024以上时,eclipse无法打开,并且我收到错误“jvm终止。退出代码 =-1“...

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


答案 1

是的,有一个最大值,但它取决于系统。试试看,加倍,直到你达到一个极限,然后向下搜索。至少在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。


答案 2

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

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

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

  2. 如果您的类未列在“Java应用程序”子树左侧列表中,请单击左上角的“新建启动配置”

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

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

    我认为1024米应该足以满足你的需求!

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

  6. 应该:)工作


推荐