2010-04-29 4 views
48

Учитывая следующую командную строкуДублированные варианты исполнения Java: какой порядок предпочтений?

java -Xms128m -Xms256m myapp.jar 

Какие параметры будут применяться для JVM минимальный объем памяти (Xms опция): 128M или 256M?

+10

Нет опечатки в вопросе. Опция Xms используется дважды специально. В этом суть вопроса – fabien7474

ответ

20

Зависит от JVM, возможно, версия ... возможно, даже сколько скрепки на вашем столе в то время. Это может даже не сработать. Не делай этого.

Если по какой-то причине это не под вашим контролем, скомпилируйте и запустите это так же, как вы запустите свою банку. Но будьте осторожны, полагаясь на порядок вариантов - это действительно плохая идея.

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 - лучше подсчитать эти скрепки :-). Серьезно, это не наука о ракетах, чтобы изменить то, что проходит мимо этих двусмысленных аргументов. –

+2

пытался с разным количеством скрепки. не может найти переход к первому – OganM

9

Держу пари, что это второй. Аргументы, как правило, обрабатываются в порядке:

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

Но если бы я писал Java аргумент парсер, я жаловался на противоречивые аргументы.

29

IBM JVM рассматривает самый правый экземпляр аргумента в качестве победителя. Я не могу разговаривать с HotSpot и т. Д.

Мы делаем это, так как часто имеются вложенные командные строки из пакетных файлов, где люди могут добавлять только до конца и хотят сделать это победителем.

+12

+1 для ответа на вопрос вместо подтверждения. – JimN

+0

Действительно: https://www.ibm.com/support/knowledgecenter/SSYKE2_7.0.0/com.ibm.java.zos.70.doc/diag/appendixes/cmdline/cmdline_specifying.html –

25

FTR, OpenJDK 1.7 также, кажется, имеет самое правое значение, по крайней мере, для -Xms.

+10

+1 для фактического ответа на вопрос вместо понтификации. – JimN

+0

точно так же, как CSS, более поздние победы – ryenus

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