java - 关于 VM 参数

标签 java memory jvm arguments heap-memory

我的想法是否正确:当在 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);
    }
}

最佳答案

执行此操作的唯一方法是让程序使用您想要的堆启动该程序的另一个副本。注意:最终用户可能不需要 2 GB,例如

如果他们有 32 位 Windows,则不能,例如如果它们的默认值仅为 120 MB,则它们很可能拥有 32 位 Windows 客户端 JVM,而不能为 2 GB。如果他们有 32 GB 或更多,他们可能需要 2 GB 以上。

顺便说一句,Gb = 千兆位,Mb = 兆位,GB = 千兆字节。 MB = 兆字节。

关于java - 关于 VM 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17834775/

相关文章:

java - 如何使用 open-feign 下载文件

java - 在 Graphics2D 中将鼠标监听器与多边形相结合

c++ - C++ 的 ORG 替代方案

c++ - 如何加载自定义字体以便我可以在 DirectX 中使用它们?

java - Java是用什么写的?

java - Android:通用空指针异常

java - 使用逗号作为分隔符分隔字符串中的 id 或值

Python,内存错误,csv文件太大

java - Sun JVM 如何将 Java 线程映射到 Windows 线程?

java - 在什么情况下 JVM 会决定增加堆的大小?