2011-01-13 9 views
7

私は、NeverReturnと呼ばれる無限ループ(何もせず、ループとスリープ)を実行するクラスを持っています。私は、Windows XP 32ビットで次のコマンドを使用して、それを実行しよう:1台のマシンにいくつのJVMを置くことができますか?

javaの-Xms1200M NeverReturn

私は同時に唯一の4 Javaのインスタンスを作成することができますコマンドを見つけます。 5番目以降のjavaコマンドはjvmの作成に失敗します。

コマンドを-Xms600Mに変更すると、8つのJavaインスタンスを作成できます。 9日は失敗する。

誰もそれを説明できますか?私はsun jdk1.6 update 23とjdk1.5 update 22を使用しています。

+3

-Xmsで 's'を指定すると、JVMは**少なくともそのメモリを割り当てます**。たぶん、あなたは '-Xmx'を考えていて、 'x'で、**ほとんどのメモリを**多く割り当てます。あなたのマシンが6GBの場合、あなたが見ているものは、 '-Xms'を使ったことで全く正常です。 – Gugussee

+0

32ビットXPバージョンは4GBしか扱えません。その場合は3GB程度しかありません。 – tigger

+1

私は-Xmsと-Xmxの違いを理解しています。私の質問は、32ビットWindowsシステム上で約2GBのメモリをすべてのプロセスに与える能力をOSに持っていることです。しかし、なぜこれらのjvmプロセスがまだいくつかのlimiationクロスがあります。 – xeranic

答えて

5

それぞれ1200Mのメモリを使用するJVMのインスタンスが4つある場合、4800Mのメモリが割り当てられます。

それぞれ最大600Mのメモリを使用するJVMのインスタンスが8つある場合は、4800Mのメモリも使用できます。

私が推測しなければならないのは、システムに存在するよりも多くのメモリをJVMインスタンスに提供しようとしているということです。お約束のメモリ量を減らすには、それに対応して実行できるインスタンス数が増えるはずです。

+0

+1。はい、JDKは、-Xms(および他の関連する)設定を保証するのに十分なメモリがあるかどうかをチェックします。 – Thilo

+2

JVMは起動時に連続したメモリブロックを割り当てます。これ以上メモリ+スワップが残っていなければ失敗します。 –

0

このように起動された仮想マシンのインスタンスごとに、600 MBのメモリが専用になっています。つまり、1 GBのメモリしか持たない場合、各インスタンスに対して600 MBのメモリを消費します。そのサウンドによって、それぞれ600MBの8つのインスタンスを実行するときに、約4.6GBのメモリが解放されました。

2

単純回答: 必要な数のJVM。もちろん、あなたのマシンが必要なリソース(メモリを読み込める)を提供できる限りです。

マシン(JDK/JREの異なるバージョン)で使用できるJDK/JREの数を確認するには、次のように入力します。答えは「制約はありません」です。

あなたは多くのJDKを持つことができますが、Windowsインストーラについてはわかりません。代わりにダンプを使用することもできます。

これが役に立ちます。

+0

しかし、私が見る真実は、多くのjvmインスタンスの合計メモリに若干の制限があることです。しかし、その制限は他のプロセスには存在しません。 – xeranic

関連する問題