【问题标题】:How to increase java heap size programmatically如何以编程方式增加 Java 堆大小
【发布时间】:2011-01-05 15:25:40
【问题描述】:

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

【问题讨论】:

  • 为什么不选择添加一些带有为 jvm 定义的启动参数(如 Xmx)的启动脚本(bat 或 sh)并将其与应用程序本身一起部署。
  • 如果任何应用都可以随意提高限制,那么设置限制有什么意义?
  • 您不能以编程方式更改正在运行的应用程序中的内存限制
  • 供参考,这里是热点的RFE:bugs.sun.com/bugdatabase/view_bug.do?bug_id=4408373

标签: java size heap-memory


【解决方案1】:

将 -Xmx 设置为一个 gig 并不意味着 JVM 会在启动时分配那么多内存。 JVM 将只分配 -Xms(加上开销),直到需要更多堆空间。您是否需要保护您的用户免受操作系统的虚拟内存或内存分配失败的影响?如果不是,只需将 Xmx 设置为较大的值。请注意,Windows 32 位 JVM 通常会忽略大于 1.2Gig 的 Xmx 设置,因此为了安全起见,最好不要请求超过一个 gig 左右。

【讨论】:

  • 32 位 JVM 不会忽略较大的最大堆大小,而是不会启动。只需设置 -mx1200m 或类似的。 (-mx 和 -Xmx 一样有效)
【解决方案2】:

没有这样的标准 API 可以做到这一点。

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

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

【讨论】:

    【解决方案3】:

    请参阅这篇关于增加 Java 堆大小的帖子:

    increase the java heap size permanently?

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

    最好的问候

    【讨论】:

      【解决方案4】:

      看看launch4j 之类的内容,并考虑部署可执行文件,以便在有人开始运行您的应用程序时控制限制。

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

      【讨论】:

        【解决方案5】:

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

        请参阅此SO question 了解部署备选方案。

        【讨论】:

          猜你喜欢
          • 2011-06-14
          • 2012-09-26
          • 2013-12-24
          • 2012-12-07
          • 2013-01-26
          • 1970-01-01
          • 2019-02-10
          • 2012-07-14
          相关资源
          最近更新 更多