Netbeans IDE之外的堆空间问题

3

编辑:我最终采用了两个答案的组合,并自己回答了我的问题,下面是被接受的答案,希望这能对未来的其他人有所帮助!

我在 Windows 7 上运行32位Java 1.8.0_40。

我在Netbeans 8.0中创建了一个程序,并调整了VM选项为-Xms512m -Xmx2048m。

该程序在Netbeans IDE环境中运行得很好,但当我尝试在Netbeans之外运行该程序时,遇到了堆空间不足的内存错误。

编辑:我通过Netbeans编译项目后,通过.jar文件启动程序。

我已经打开了Java控制面板并将相同的“-Xms512m -Xmx2048m”信息应用于运行时参数。但我仍然遇到了堆空间不足的内存错误。

有什么建议吗?我应该从哪里开始?我是否错过了确保在Netbeans之外的运行环境中有足够内存的步骤?


你是否尝试直接在运行应用程序时将VM选项传递给JVM? - copeg
不,我在代码中没有明确传递任何VM选项。我一直在努力寻找一种清晰的方式来实现它,而不是通过命令行。 - senex_subconscious
3
请问您在Netbeans之外启动应用程序的确切方式是什么?它是一些Shell脚本,还是一个自动执行的JAR文件,或者其他任何方式? - Jorge_B
@Jorge_B 编辑后将其添加到主问题中以供其他人查看。目前,我只是通过Netbeans编译代码时在dist文件夹中创建的.jar文件启动程序。 - senex_subconscious
3个回答

4
您可以在NetBeans中使用的VM选项也可以在命令行中使用,例如:
java -Xms512m -Xmx2048m  -jar yourprg.jar

有更多的JVM选项可用。


我尝试使用这个命令行选项,但它对我没有用,我的.jar文件存储在网络计算机上。难道我不需要把.jar文件放在本地机器上吗?编辑:即使我已经将.jar文件和lib文件夹放在桌面上,我仍然收到“错误:无法访问jar文件”的消息。 - senex_subconscious
这些JVM选项是针对在您本地计算机上运行的JVM的。无论jar文件来自何处,它都将加载、运行并使用您的JVM所在的内存。除非我们忽略了一些明显的东西,并且您正在通过telnet/ssh连接到远程计算机并从那里运行JVM。 - Sanj
嗯...就我所知,我没有做任何类似的事情。我们必须将所有项目保存在共享本地服务器上,但我们没有采取任何特殊措施来访问它们,没有SSH或其他方式,只需通过驱动器的字母连接即可。我不需要对.jar文件进行完全限定的地址或其他什么吗? - senex_subconscious

2

由于您正在构建一个独立的JAR文件,看起来没有一种干净的方法将这些选项包含在您的JAR文件中(一些人已经在此处此处提出了相关问题,但没有明确的答案)。在您的情况下,我的解决方案通常是提供一个带有正确的 -Xms 和 -Xmx 参数的小型 shell 脚本,以及我的 JAR 文件。


当你说“shell脚本”时,你是指一个 .bat 文件吗? - senex_subconscious
1
是的,那是我的想法。这个适合你的问题吗?这取决于你将软件部署到哪里(你可以写一个 .bat 和标准的 .sh 版本的启动器,以防万一)。 - Jorge_B
我会尝试并回报。 - senex_subconscious

1

我结合了两个答案。最终结果是我必须使用完全限定名称并用引号括起来执行该命令,由于其他人将使用此程序,因此我可以创建一个.bat文件来执行。最终的.bat文件看起来像这样:

java -Xms512m -Xmx2048m -jar "T:\Netbeans Projects\DataLoader\dist\DataLoader.jar"

感谢Jorge_B和Sanj的帮助!希望这能帮到其他人!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接