2013-07-24 82 views
0

我是否认为在IDE中指定虚拟机参数(在此实例中使用NetBeans)时,只有在代码通过IDE本身运行时才会传递这些参数?基本上,我想指定当我的程序运行时,虚拟机的最小/初始堆大小是2Gb。我可以使用-Xms2048m命令执行此操作,但我想知道是否有某种方法可以实现此目的,而无需输入命令(出于客户的考虑)。关于虚拟机参数

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

我错过了什么?

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

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); 
    } 
} 

回答

1

做到这一点的唯一方法是让程序启动诶堆你想witht程序的另一个副本。注意:最终用户可能不需要2 GB

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

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

0

没有,你不能编程更改堆大小。命令行是唯一的方法

0

堆能够shrink GC迭代后,如果GC决定存在分配太多的未使用的堆空间。也许这是应用程序启动后的方式,每次显示相同的大小。

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

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