Frage

Wir können JVM-Argumente verwenden, um den für den JVM-Heap usw. zugewiesenen Speicher zu begrenzen.

Ich würde gerne wissen, ob wir diese Werte während der Entwicklungszeit im Java-Programm fest codieren können, anstatt JVM-Argumente in der Befehlszeile hinzuzufügen, wenn wir das Programm ausführen.Ist es möglich?

War es hilfreich?

Lösung

Meine erste Frage sollte lauten: Warum stellen Sie es überhaupt ein?Die Server-JVM legt das Maximum auf 1/4 der Hauptspeichergröße fest, was für die meisten Anwendungen angemessen ist.Sie können dies ändern, indem Sie eine eigene JVM erstellen oder einen Alias ​​wie erstellen

alias java="java -Xmx30g"

Sie können die Speichernutzung regelmäßig überprüfen und den Prozess abbrechen, wenn Sie mehr verwenden.Das ist natürlich eine sehr schlechte Idee.

Stattdessen können Sie das Programm erneut mit denselben Argumenten, aber mit der gewünschten maximalen Heap-Größe ausführen.D.h.Sie können Runtime.exec.

Sie können es nicht ändern, da beim Start die maximale Speichergröße reserviert wird.

Übrigens gibt es ein weit verbreitetes Missverständnis, dass der Heap der einzige Speicher ist, der zählt.Dies trifft nicht zu, da die JVM, die Thread-Stacks, der native Speicher usw. alle etwas Speicher beanspruchen, sodass Sie den Heap auf 100 MB festlegen können, die JVM jedoch möglicherweise 300 MB verwendet.

Andere Tipps

Versuchen Sie, die Haufengröße zur Laufzeit zu ändern? Sie können dies nicht tun, da der Wert der Heap -Größe festgelegt werden muss, wenn JVM startet und sich dann nicht ändern kann.

Nein, das kannst du nicht. Alles, was Sie tun können, ist Argument für die Befehlszeile hinzuzufügen, um die Haufengröße zu verwalten.

Eine schmutzige Lösung kann darin bestehen, einen anderen Prozess mit einer anderen Haufengröße zu erzeugen, aber ich glaube nicht, dass Sie dies suchen. Hier Es gibt ein Beispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top