【问题标题】:Setting VM Options in JAR (-Xmx) [JVM Startup Parameters]在 JAR (-Xmx) 中设置 VM 选项 [JVM 启动参数]
【发布时间】:2014-05-22 22:33:45
【问题描述】:

我搜索了这个问题,并在 stackoverflow 本身上得到了很多匹配,但其中的答案有点矛盾。

在问题中:How to add VM options to jar? 投票最多+接受的人说这是不可能的,而且问题中的大多数答案:Can I set Java max heap size for running from a jar file? 说不,这是不可能的。大多数这些“不可能”的答案都是由享有盛誉的人给出的,因此我认为他们不可能都是巧合错误。

一个人说可以通过使用this 来完成,其他人说要为它制作一个安装程序,或者使用 Launch4J 或制作批处理文件或制作另一个 JAR 并通过此运行主程序,但其中大多数没有得到很多与那些说“不”的人相比。

那么这真的可能吗?我的问题是堆空间用完了,因此我想在 JAR 中增加它。

第一季度。我已经从 netbeans 设置了增加的堆空间,它会在 JAR 中增加吗? (我认为不,我只是确认这一点)

Q2。我现在应该怎么做才能增加 JAR 中的堆空间? (我正在寻找一种易于操作的方法,因为我不了解批处理脚本和所有知识,而且我已经放置了一个安装程序来放置这些文件(高级安装程序),所以我不想放置额外的安装程序来执行此操作) 有没有简单的出路?

【问题讨论】:

    标签: java jar jvm


    【解决方案1】:

    A1。从 Netbeans 运行应用程序时,您会生成一个执行应用程序的 JVM 进程。从 Netbeans 设置堆大小仅意味着它将使用您配置的最大堆大小启动 JVM。它不会以任何方式影响您正在创建的 jar。

    A2。您无法在 jar 中配置堆大小。这不能以编程方式或通过某些清单配置来完成。
    设置最大堆只能通过在启动 JVM 时传递正确的 JVM 选项来完成,这可以通过使用某种启动脚本或使用 stackoverflow 上的许多答案中提到的 Java 启动器来完成。
    我认为启动脚本的选项更好,因为它允许最终用户在需要时控制内存设置。使用启动器,内存设置通常是硬编码的,无法更改。 我建议您应该查看可用于各种开源 Java 产品的许多启动脚本。另一种选择是搜索“java 启动脚本”或类似内容。

    【讨论】:

      【解决方案2】:

      第一季度。我已经从 netbeans 中设置了增加的堆空间,JAR 中也会增加吗?

      The memroy use in JVM can be explain blow:

      在里面 表示初始内存量(以字节为单位) 来自操作系统的 Java 虚拟机请求 用于启动期间的内存管理。 Java 虚拟机 可能会向操作系统请求额外的内存,并且 随着时间的推移,也可能会向系统释放内存。 init 的值可能未定义。 用过的 表示当前使用的内存量(以字节为单位)。 坚定的 表示内存量(以字节为单位),即 保证可供 Java 虚拟机使用。 提交的内存量可能会随着时间而改变(增加 或减少)。 Java 虚拟机可能会释放内存以 system 和committed 可能小于init。 承诺将永远大于 或等于使用。 最大限度 表示最大内存量(以字节为单位) 可用于内存管理。它的值可能是未定义的。 如果已定义,最大内存量可能会随时间变化。 已使用和已提交的内存量将始终小于 如果定义了 max,则等于 max。 如果尝试增加内存分配可能会失败 已使用的内存,使得已使用 > 甚至已提交 如果使用

      第二季度。我现在应该怎么做才能增加 JAR 中的堆空间?

      也许你可以通过一些技巧来做到这一点,比如把你的罐子包在另一个罐子里。

      将你的 jar 复制到 another_project/resources/ 并将 another_project 打包到一个 jar 中。

      code blow 只是一个示例,可能无法运行或编译。

      public static void main(String[] args) {
          String jarFile = this.getClass().getResource("/resources/you.jar").getFile();
          Runtime.getRuntime().exec("java -Xmx256m -jar "+jarFile);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-20
        相关资源
        最近更新 更多