2011-01-13 13 views
7

Ich habe eine Klasse, die infinit laufen (nichts tun, nur Schleifen und schlafen), namens NeverReturn. Ich versuche, es zu laufen folgenden Befehl in Windows XP 32-Bit:Wie viele JVM können wir in einer Maschine haben?

java -Xms1200M NeverReturn

ich mit dem Befehl finden kann ich nur 4 Java-Instanz zur gleichen Zeit erstellen. Der fünfte und der nächste Java-Befehl können jvm nicht erstellen.

Wenn ich den Befehl zu -Xms600M ändern, kann ich 8 Java-Instanz erstellen. Der 9. wird gescheitert sein.

Könnte jemand das erklären? Ich verwende sun jdk1.6 update 23 und jdk1.5 update 22.

+3

Die 's' in -Xms zwingen die JVM, ** mindestens ** soviel Speicher zuzuweisen. Vielleicht hast du an '-Xmx' gedacht, mit einem 'x', das ** höchstens soviel Speicher zuweist. Wenn Ihr Computer 6 GB hat, ist das, was Sie sehen, völlig normal, dass Sie "-Xms" verwendet haben. – Gugussee

+0

Die 32bit XP-Version kann nur 4GB verarbeiten - und afaik, da sind dann nur etwa 3GB verfügbar. – tigger

+1

Ich verstehe den Unterschied zwischen den -Xms und -Xmx. Meine Frage ist OS haben die Fähigkeit, jeden Prozess über 2 GB Speicher auf 32-Bit-Windows-System zu geben. Aber warum gibt es noch eine Einschränkung, die diesen jvm-Prozess kreuzt. – xeranic

Antwort

5

Wenn Sie vier Instanzen der JVM haben, die jeweils 1200M Speicher verwenden, erhalten Sie 4800M Speicher zugewiesen.

Wenn Sie acht Instanzen der JVM haben, die jeweils bis zu 600M Speicher verwenden, erhalten Sie 4800M Speicher.

Wenn ich raten musste, scheint das Problem darin zu bestehen, dass Sie den JVM-Instanzen mehr Speicher versprechen als auf Ihrem System. Das Löschen der Speichermenge, die Sie versprechen, sollte die Anzahl der Instanzen, die Sie ausführen können, entsprechend erhöhen.

+0

+1. Ja, das JDK überprüft, ob genügend Speicher vorhanden ist, um die Einstellungen für -Xms (und andere verwandte) zu garantieren. – Thilo

+2

Die JVM weist beim Start einen fortlaufenden Speicherblock zu. Es wird fehlschlagen, wenn kein Speicher + Swap mehr vorhanden ist. –

0

Für jede Instanz der virtuellen Maschine, die auf diese Weise gestartet wird, sind 600 MB Speicher reserviert, dh wenn Sie nur 1 GB Speicher hatten, konnten Sie nur eine JVM-Instanz erfolgreich starten, wenn Sie jede Instanz zulassen verbrauchen 600 MB Speicher. Laut den Sounds hatte man zum Zeitpunkt der Ausführung von 8 Instanzen von 600 MB ungefähr 4,6 GB Speicher frei.

2

Einfache Antwort: so viele JVMs wie Sie möchten; Natürlich solange Ihre Maschine die notwendigen Ressourcen zur Verfügung stellt (Speicher lesen).

Wenn Sie fragen möchten, wie viele JDK/JREs Sie in einer Maschine verwenden können (verschiedene JDK/JRE-Versionen); Die Antwort lautet: "Es gibt keine Einschränkung".

So können Sie auch viele JDKs haben, aber ich bin mir der Windows-Installer nicht sicher. Sie können stattdessen immer einen Dump verwenden.

Hoffe, das hilft.

+0

Allerdings ist die Wahrheit, die ich sehe, dass es eine Beschränkung auf das gesamte Gedächtnis vieler jvm-Instanzen gibt. Diese Einschränkung existiert jedoch nicht für andere Prozesse. – xeranic

Verwandte Themen