【问题标题】:About VM arguments关于 VM 参数
【发布时间】:2013-07-23 23:22:40
【问题描述】:

当我在 IDE 中指定 VM 参数时(我在此实例中使用 NetBeans),我是否认为这些参数仅在代码通过 IDE 本身运行时才传递?

基本上,我想指定当我的程序运行时,VM 的最小/初始堆大小为 2Gb。我可以使用 -Xms2048m 命令执行此操作,但我想知道是否有某种方法可以实现此操作,而无需键入命令(为了客户)。

即使我在 NetBeans 和 Launch4J 中设置了 VM 参数(我将 JAR 包装到一个 EXE 文件中),当程序启动并输出运行时的总内存大小时,它总是给出 ~120Mb。

我错过了什么?

编辑:我使用...输出总内存大小

 int mb = 1024 * 1024;
 System.out.println("Max Memory: " + Runtime.getRuntime().totalMemory() / mb);

编辑 2:不能创建一个不带参数的初始化程序,而是使用相关的 VM 参数启动主程序吗?比如……

public class Main {
    public static void main(String[] args) {
        String execName = new File(new File("").getAbsolutePath()) + "\\Program.exe";
        Runtime rt = Runtime.getRuntime();
        rt.exec("java -Xms2048m -Xmx4096m -jar " + execName);
    }
}

【问题讨论】:

    标签: java memory jvm arguments heap-memory


    【解决方案1】:

    这样做的唯一方法是让程序使用您想要的堆启动另一个程序副本。注意:最终用户可能不想要 2 GB,例如

    如果他们有 32 位窗口,他们就不能,例如如果他们的默认值只有 120 MB,他们很可能有一个 32 位 Windows 客户端 JVM,它不能是 2 GB。如果他们有 32 GB 或更多,他们可能需要超过 2 GB。

    BTW Gb = 千兆位,Mb = 兆位,GB = 千兆字节。 MB = 兆字节。

    【讨论】:

      【解决方案2】:

      ,您不能以编程方式更改堆大小。命令行是唯一的方法

      【讨论】:

        【解决方案3】:

        由于values必须在JVM期间设置initialization你不能

        关于oracle forums.的一些有用的讨论

        然后:programatically setting max java heap size

        【讨论】:

          【解决方案4】:

          如果 GC 确定分配了太多未使用的堆空间,则堆可以在 GC 迭代后shrink。也许这是在您的应用程序启动后,它每次都会向您显示相同的大小。

          而且 -Xms 似乎设置了堆的初始大小,而不是最小值

          C:\Users\AStybaev>java -X
          ...
          -Xms<size>        set initial Java heap size
          ...
          

          【讨论】:

            猜你喜欢
            • 2011-07-30
            • 2015-11-14
            • 2016-01-22
            • 1970-01-01
            • 1970-01-01
            • 2013-07-21
            • 1970-01-01
            • 1970-01-01
            • 2018-10-19
            相关资源
            最近更新 更多