次のコマンドラインを考慮する
java -Xms128m -Xms256m myapp.jar
JVM 最小メモリ (Xms
オプション) : 128m または 256m に適用される設定はどれですか?
次のコマンドラインを考慮する
java -Xms128m -Xms256m myapp.jar
JVM 最小メモリ (Xms
オプション) : 128m または 256m に適用される設定はどれですか?
いつものように、ローカル 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 では)。これは、他のほとんどの最新バージョンでも同様です。
IBM JVMは、引数の右端のインスタンスを勝者として扱います。HotSpotなどとは話せません。
これを行うのは、バッチファイルから深くネストされたコマンドラインがあり、最後に追加することしかできず、それを勝者にしたいと考えているためです。
FTR、OpenJDK 1.7 も、少なくとも -Xms については、最も右の値を取るようです。
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());
}
}
きっと二代目です。引数は通常、次の順序で処理されます。
for( int i=0; i<argc; i++ ) {
process_argument(argv[i]);
}
しかし、Java 引数パーサーを書いていたら、競合する引数について文句を言うでしょう。