92

次のコマンドラインを考慮する

java -Xms128m -Xms256m myapp.jar

JVM 最小メモリ (Xmsオプション) : 128m または 256m に適用される設定はどれですか?

4

7 に答える 7

67

いつものように、ローカル 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}

したがって、この場合、引数の 2 番目のインスタンス (2G) が優先されることがわかります (少なくとも 1.8 では)。これは、他のほとんどの最新バージョンでも同様です。

于 2014-11-04T03:39:05.703 に答える
40

IBM JVMは、引数の右端のインスタンスを勝者として扱います。HotSpotなどとは話せません。

これを行うのは、バッチファイルから深くネストされたコマンドラインがあり、最後に追加することしかできず、それを勝者にしたいと考えているためです。

于 2010-04-30T00:48:50.757 に答える
37

FTR、OpenJDK 1.7 も、少なくとも -Xms については、最も右の値を取るようです。

于 2014-01-03T11:10:32.637 に答える
29

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());
    }
}
于 2010-04-29T21:17:37.487 に答える
10

きっと二代目です。引数は通常、次の順序で処理されます。

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

しかし、Java 引数パーサーを書いていたら、競合する引数について文句を言うでしょう。

于 2010-04-29T21:30:29.703 に答える