2013-07-24 120 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 
...