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

使用-Xmx内存参数可能会导致错误“;无法创建Java虚拟机“;,java,memory,error-handling,parameters,jvm,Java,Memory,Error Handling,Parameters,Jvm,我创建了一个java应用程序,许多用户都在使用它。我已将应用程序捆绑在一个exe文件中,在该文件中使用以下命令运行: java-jar-Xms256m-Xmx1024m MyApplication.jar 我使用这个高“-Xmx”值是因为有时应用程序可能需要高内存才能工作,或者可能导致“内存不足”错误 该应用程序对我来说运行得很好,因为我有3GB的RAM,但许多其他用户在启动时会出现错误“无法创建Java虚拟机”,因为他们的内存很低:1.5GB或2GB 我被困在两个错误之间“内存不足”和“无法创

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

java-jar-Xms256m-Xmx1024m MyApplication.jar

我使用这个高“-Xmx”值是因为有时应用程序可能需要高内存才能工作,或者可能导致“内存不足”错误

该应用程序对我来说运行得很好,因为我有3GB的RAM,但许多其他用户在启动时会出现错误“无法创建Java虚拟机”,因为他们的内存很低:1.5GB或2GB

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


如果该内存可用,是否有java参数来保留1024个内存,如果没有,则在需要时保留最大内存?

您需要1GB还是不需要

如果您想在可用的情况下使用更多内存,我会尝试使用
-server
JVM,该JVM默认为最大主内存的1/4。它还可以使长时间运行的程序更快

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

这可能已经足够接近了。您也可以考虑使用堆内存,因为这可以为您如何使用内存提供更多的选项。
顺便说一句:4 GB内存的成本不到20美元P

Java虚拟机需要在windows中连续分配内存。如果RAM为2GB,并且它可能没有足够的1GB的

连续内存块,则会出现错误

我认为没有

您面临的更大的问题是,如果您在将Xmx设置得更低时内存不足(即其他用户可以使用相同的Xmx),那么他们也会内存不足,因此您允许他们设置更低的Xmx并没有真正起到任何作用


我认为简单的答案是,您需要为运行程序设置一些最低内存要求。

提供操作系统(Windows/linux,64位/32位)和Java(64位/32位)版本,以使问题具体化。在32位Windows机器上,JVM大小存在严重限制。使用64位Windows或Linux。我同意Peter的观点,您必须设置一些运行应用程序的最低要求。通过检查应用程序并确定是否可以减少大量内存的使用,您很可能可以减少这种需求。归根结底,这取决于你的程序在做什么,以及它对内存的要求有多高:考虑到现在即使是最低端的品牌机器都配备了4+内存,1-2GB的内存也低得离谱,你也可以以非常便宜的价格购买高质量的桌面内存。(想想16GB的100美元)我可以花49英镑买16 GB,但我怀疑从内存大小(如3.5 GB)来看,它运行的是32位Windows XP或类似的系统。啊,是的,这对~3GB来说是有意义的,但对于运行在1GB左右的用户来说,最终他们必须明白,1GB的总系统内存可能非常适合于运行于90年代的应用程序,并满足其需求不会因为今天的应用而削减它。至于成本,100美元是大约一年前的价格,看到它持续下降真的像往常一样令人惊讶。你可以花970美元购买一台Xeon E3 3.4 GHz和16 GB内存的服务器。不幸的是,这是唯一可以使用的实用解决方案。我实际上看到了一个Java应用程序,它允许用户手动设置分配的内存,但我不知道他们是怎么做到的:
1.5 GB -> 0.38 GB
2 GB   -> 0.5 GB
3.5 GB -> 0.88 GB