Wie lege ich die minimale und maximale Heap-Größe von Java über Umgebungsvariablen fest?

76

Wie lege ich die minimale und maximale Heap-Größe von Java über Umgebungsvariablen fest?

Ich weiß, dass die Heap-Größen beim Starten von Java festgelegt werden können, möchte dies jedoch über Umgebungsvariablen auf meinem Server anpassen.

Jeff Thompson
quelle
Die akzeptierte Antwort ist veraltet und gilt nicht mehr. Lesen Sie die Antwort von @ Gauthier, wenn Sie hier landen
Laie

Antworten:

80

Sie können Umgebungsvariablen nicht direkt verwenden. Sie müssen die "nicht standardmäßigen" Optionen verwenden, die an den Java-Befehl übergeben werden. Führen Sie: java -X für Details aus. Die Optionen, nach denen Sie suchen, sind -Xmx und -Xms (dies ist die "anfängliche" Heap-Größe, also wahrscheinlich das, wonach Sie suchen.)

Einige Produkte wie Ant oder Tomcat verfügen möglicherweise über ein Batch-Skript, das nach der Umgebungsvariablen JAVA_OPTS sucht, jedoch nicht Teil der Java-Laufzeit ist. Wenn Sie eines dieser Produkte verwenden, können Sie die Variable möglicherweise wie folgt festlegen:

set JAVA_OPTS="-Xms128m -Xmx256m"  

Sie können diesen Ansatz auch mit Ihrer eigenen Befehlszeile wie folgt ausführen:

set JAVA_OPTS="-Xms128m -Xmx256m"  
java ${JAVA_OPTS} MyClass
Todd
quelle
1
Die JAVA_OPTSTechnik wird auch von den Skripten verwendet, die vom Maven Appassemble Plugin generiert werden.
Mutant Bob
2
Wie @neves in einem Kommentar unten erwähnt hat, hat sich dies in Java 7 geändert ( docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/… ). Sie können JAVA_TOOL_OPTIONS verwenden (siehe Link und Antworten unten)
Keisar
67

Wenn Sie möchten, dass ein javaProzess, nicht nur Ant oder Tomcat, Optionen wie -Xmxdie Umgebungsvariable verwendet _JAVA_OPTIONS.

In Bash: export _JAVA_OPTIONS="-Xmx1g"

wmli
quelle
1
Perfekt, das funktioniert großartig und hat mir viel Aussehen erspart.
Rodnaph
1
In Windows: set _JAVA_OPTIONS=-Xmx1g Um es dauerhaft zu machen, machen Sie eine neue Umgebungsvariable _JAVA_OPTIONS und setzen Sie es auf-Xmx1g
tim_hutton
10

Sie können dies nicht mit Umgebungsvariablen tun. Dies erfolgt über "nicht standardmäßige" Optionen. Ausführen: java -Xfür Details. Die Optionen, nach denen Sie suchen, sind -Xmxund -Xms(dies ist die "anfängliche" Heap-Größe, also wahrscheinlich das, wonach Sie suchen.)

a2800276
quelle
1
Es sieht so aus, als hätte es sich in Java 7 geändert: docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/…
neves
7

Sie können verwenden JAVA_TOOL_OPTIONS.

Beispiel:

export JAVA_TOOL_OPTIONS=-Xmx512m

Es wurde in einigen Kommentaren und in einer anderen Antwort erwähnt .

Die Frage des OP ist ziemlich alt, aber da es das erste Google-Ergebnis für die Frage ist, dachte ich, ich würde die Antwort hier aus Gründen der Klarheit hinzufügen.

Gauthier
quelle
4

Ich denke, Ihre einzige Möglichkeit besteht darin, Java in ein Skript zu verpacken, das die Umgebungsvariablen in die Befehlszeile einfügt

frankodwyer
quelle
3

Ein paar Anmerkungen:

  1. Apache Ant weiß nichts über JAVA_OPTS, während Tomcats Startskripte dies tun. Verwenden Sie für Apache ant ANT_OPTS, um die Umgebung für die JVM zu beeinflussen, auf der / ant / ausgeführt wird, nicht jedoch für die Dinge, die ant möglicherweise startet.

  2. Die maximale Heap-Größe, die Sie festlegen können, hängt vollständig von der Umgebung ab: Bei den meisten 32-Bit-Systemen liegt der maximale Heap-Speicherplatz, den Sie unabhängig vom verfügbaren Speicher anfordern können, im Bereich von 2 GB. Der größte Haufen auf einem 64-Bit-System ist "wirklich groß". Außerdem sind Sie praktisch auch durch den physischen Speicher begrenzt, da der Heap von der JVM verwaltet wird und Sie nicht viel auf die Festplatte tauschen möchten.

  3. In Serverumgebungen möchten Sie normalerweise -Xms und -Xmx auf denselben Wert setzen: Dadurch wird die Größe des Heapspeichers auf eine bestimmte Größe festgelegt, und der Garbage Collector hat weniger Arbeit zu erledigen, da der Heapspeicher nie erneut erstellt werden muss Größe.

Christopher Schultz
quelle