2010-04-29 22 views

回答

20

取決於JVM,可能是版本......也許甚至有多少紙夾在你的辦公桌上。它甚至可能不工作。不要這樣做。

如果出於某種原因無法控制,請按照運行jar的相同方式進行編譯和運行。但要注意,依靠選項的順序是一個非常糟糕的主意。

public class TotalMemory 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Total Memory: "+Runtime.getRuntime().totalMemory()); 
     System.out.println("Free Memory: "+Runtime.getRuntime().freeMemory()); 
    } 
} 
+2

+1 - 更好地計算這些回形針:-)。嚴重的是,改變任何通過這些模棱兩可的論點的東西並不是火箭科學。 – 2010-04-30 00:33:53

+2

一直嘗試使用不同數量的回形針。無法找到切換到第一個 – OganM 2017-06-12 20:08:04

9

我敢打賭這是第二個。參數通常按以下順序處理:

for(int i=0; i<argc; i++) { 
    process_argument(argv[i]); 
} 

但是,如果我正在寫java參數解析器,我會抱怨衝突參數。

29

IBM JVM將參數的最右側實例視爲優勝者。我不能說HotSpot等。

我們這樣做是因爲經常存在來自批處理文件的深層嵌套命令行,其中人們只能添加到最後,並且希望使其成爲贏家。

+12

+1實際上回答問題,而不是pontificating。 – JimN 2014-05-22 03:04:06

+0

事實上:https://www.ibm.com/support/knowledgecenter/SSYKE2_7.0.0/com.ibm.java.zos.70.doc/diag/appendixes/cmdline/cmdline_specifying.html – 2016-08-02 12:33:49

25

FTR,OpenJDK 1.7也似乎採取最右邊的價值,至少爲-XMS。

+10

+1實際回答問題而不是強姦。 – JimN 2014-05-22 03:04:44

+0

就像CSS一樣,後來贏得 – ryenus 2015-04-23 09:30:09

33

與往常一樣,請檢查本地JVM的具體實現,但這裏是從命令行檢查而不必編寫代碼的快速方法。

> java -version; java -Xmx1G -XX:+PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize 

java version "1.8.0_25" 
Java(TM) SE Runtime Environment (build 1.8.0_25-b17) 
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) 
uintx MaxHeapSize   := 2147483648  {product} 

所以你會在這種情況下看,爭論的第二個實例(2G)就是優先(至少在1.8),並且一直是我與其他大多數現代版本的經歷。

+7

'java -Xmx1G -XX:+ PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize',這樣就更容易推斷。 – ryenus 2015-04-23 09:28:20

相關問題