如何以编程方式增加java堆大小

问题描述:

我有一个用于搜索文件的java桌面应用程序,它通常会很快达到默认堆限制。我不会访问它将要安装的所有系统,所以我想增加应用程序本身的JVM堆大小。任何人可以帮助我,我怎么能做到这一点编程在我的应用程序如何以编程方式增加java堆大小

+2

为什么不选择为jvm(如Xmx)添加一些具有已定义启动参数的启动脚本(bat或sh),并将它与应用程序本身一起部署。 – 2010-01-15 18:36:39

+3

如果任何应用程序可以随意提出限制,那么设置限制的意义何在? – 2010-01-15 18:36:59

+0

无法以编程方式更改正在运行的应用程序中的内存限制 – 2010-01-15 19:01:16

看到这个职位约增加Java堆大小:

increase the java heap size permanently?

也许你也可以清理你的代码,以减少内存使用的某些部分。

问候

没有这样的标准API这样做。

我建议您使用Java Web Start来调用您的应用程序(可用于本地应用程序以在最新的Sun Java 6中),因为它允许您为此指定值。

然后,您可以有三个或四个链接,每个链接指向完全相同的文件,但具有“小”,“中”,“大”,“巨大”堆大小。

看一下类似launch4j的东西,并考虑部署可执行文件,以便在某人开始运行应用程序时控制限制。

您将无法以编程方式执行此操作。

对于桌面应用程序,我建议提供一个启动器,然后可以指定您想要的内存大小。除了配置JVM之外,您还可以提供图标,文件关联等。

有关部署备选方案,请参阅此SO question

将-Xmx设置为一个gig并不意味着JVM将在启动时分配那么多的内存。 JVM将只分配-Xms(加上开销),直到需要更多的堆空间。你需要保护你的用户免受虚拟内存的浪费或操作系统的内存分配失败吗?如果不是,只需将Xmx设置为一个很大的值。请注意,Windows 32位JVM通常会忽略大于1.2Gig的Xmx设置,所以最好不要超过一个演出才能安全。

+1

32位JVM不会忽略大的最大堆大小,而不会启动。只需设置-mx1200m或类似的。 (-mx和-Xmx一样好) – 2010-01-15 23:51:31