考慮下面的命令行重複的Java運行時選項:首選項的順序是什麼?
java -Xms128m -Xms256m myapp.jar
哪些設置將適用於JVM最小內存(Xms
選項):內存128M或256米?
考慮下面的命令行重複的Java運行時選項:首選項的順序是什麼?
java -Xms128m -Xms256m myapp.jar
哪些設置將適用於JVM最小內存(Xms
選項):內存128M或256米?
取決於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());
}
}
+1 - 更好地計算這些回形針:-)。嚴重的是,改變任何通過這些模棱兩可的論點的東西並不是火箭科學。 – 2010-04-30 00:33:53
一直嘗試使用不同數量的回形針。無法找到切換到第一個 – OganM 2017-06-12 20:08:04
我敢打賭這是第二個。參數通常按以下順序處理:
for(int i=0; i<argc; i++) {
process_argument(argv[i]);
}
但是,如果我正在寫java參數解析器,我會抱怨衝突參數。
IBM JVM將參數的最右側實例視爲優勝者。我不能說HotSpot等。
我們這樣做是因爲經常存在來自批處理文件的深層嵌套命令行,其中人們只能添加到最後,並且希望使其成爲贏家。
+1實際上回答問題,而不是pontificating。 – JimN 2014-05-22 03:04:06
事實上: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
與往常一樣,請檢查本地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),並且一直是我與其他大多數現代版本的經歷。
'java -Xmx1G -XX:+ PrintFlagsFinal -Xmx2G 2>/dev/null | grep MaxHeapSize',這樣就更容易推斷。 – ryenus 2015-04-23 09:28:20
沒有錯字。 Xms選項有意使用兩次。這是問題的實質 – fabien7474 2010-04-30 08:23:25