使用-Xmx内存参数可能会导致错误“无法创建Java虚拟机”

时间:2012-09-13 13:02:41

标签: java memory error-handling parameters jvm

我创建了一个java应用程序,很多用户都使用它。我已将应用程序捆绑在一个exe文件中,使用此命令运行它:

  

java -jar -Xms256m -Xmx1024m MyApplication.jar

我正在使用这个高“-Xmx”值,因为有时应用程序可能需要高内存才能工作,否则可能会导致“Out of memory”错误。

该应用程序运行正常,因为我有3GB Rams,但许多其他用户在启动时收到错误“无法创建Java虚拟机”,因为它们具有低内存:1.5GB或2GB。

我被困在两个错误“内存不足”和“无法创建Java虚拟机”之间!!

如果此内存可用,是否有一个java参数可以保留1024个内存,如果没有,那么在需要时可以保留最大内存吗?

2 个答案:

答案 0 :(得分:4)

您需要1 GB或不需要。

如果你想使用更多内存,我会尝试使用-server JVM,默认最多为主内存的1/4。它还可以更快地运行长时间运行的程序。 ;)

在您的情况下,它将使最大堆(而不是总内存)

1.5 GB -> 0.38 GB
2 GB   -> 0.5 GB
3.5 GB -> 0.88 GB

这可能足够接近。您也可以考虑使用非堆内存,因为这可以为您提供更多的内存选择。

BTW:4 GB内存的价格不到20美元。 :P

答案 1 :(得分:1)

Java虚拟机在Windows中需要contiguous allocation内存。如果RAM为2GB且可能没有足够的contiguous block of memory 1GB,则错误。