将更多的堆空间分配给Java jar

9

当您通过命令行运行程序时,可以使用java -Xms -Xmx指定堆大小。如果要通过双击.jar文件运行程序,是否有一种方法可以使用比标准更多的堆?

(当您通过双击.jar文件启动Java应用程序时,JVM会默认为其分配256MB内存,因此在该情况下,如果需要更多内存,则需要创建一个.bat或.sh文件)

4个回答

8
不行,这就是为什么我经常使用那些参数创建一个.bat或.sh文件并引导用户运行它而不是.jar文件。不幸的是,弹出命令提示符窗口有点丑陋,但无可奈何。
作为副作用,如果您的应用程序冻结,可以让用户在批处理文件中放置“pause”(或自己操作),然后您可以看到任何发生的堆栈跟踪。
编辑:您还可以使用可执行包装器,例如JSmoothLaunch4J,而不是批处理文件。尽管如此,您将失去一些跨平台兼容性。

@mmyers:你那快速的小手指可真让人嫉妒!比我快了54秒! - Welbog
抱歉,我看到你正在忙于编辑问题。(我想这是第一次有人咒骂我的快速小手指...) - Michael Myers
@Sii:是的,那可能是一个更为复杂的路径,但这可能值得一试。 - Michael Myers

5

与其直接双击 .jar 文件,您可以使用运行 java -jar -Xms -Xmx 你的文件.jar 的批处理文件。从用户的角度来看,操作相同,但它使您对实际运行的命令拥有更多的控制权。


5
您可以使用Runtime.getRuntime().exec()来让jar文件自行启动,并选择您想要的选项。该jar文件可以包含不止一个main()方法(在不同的类中),您可以通过exec()让其中一个调用另一个。

另一个不错的选择(尽管很难找出可用的内存量)。+1 - Michael Myers

2
您可以使用JSmooth或类似的封装器,它会创建一个EXE文件,该文件使用必要的参数启动JVM。这样,您就可以避免使用.bat文件和其控制台对话框。另一种方法是使用Runtime.exec或ProcessBuilder在新进程中启动实际程序。

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