it-swarm.com.de

Standard-Xmxsize in Java 8

In der Oracle-Dokumentation habe ich gefunden:

-Xmxsize Gibt die maximale Größe (in Byte) des Speicherzuweisungspools in Byte an. Die Standardeinstellung Der Wert wird zur Laufzeit basierend auf der Systemkonfiguration ausgewählt.

Was bedeutet Systemkonfiguration?

55
Vitaly

Sie variiert je nach Implementierung und Version, hängt jedoch in der Regel von den verwendeten VM (z. B. Client oder Server, siehe Parameter -client und -server) und von Ihrem Systemspeicher ab.

Oft ist der Standardwert 1/4 des physischen Speichers oder 1 GB (je nachdem, welcher Wert kleiner ist).

Java-Konfigurationsoptionen (Befehlszeilenparameter) können auch an Umgebungsvariablen einschließlich -Xmx "ausgelagert" werden, wodurch der Standardwert geändert werden kann (dh, einen neuen Standardwert angeben). Insbesondere wird die Umgebungsvariable Java_TOOL_OPTIONS von allen Java-Tools geprüft und verwendet, wenn sie vorhanden ist (weitere Details hier und hier ).

Sie können den folgenden Befehl ausführen, um die Standardwerte anzuzeigen:

Java -XX:+PrintFlagsFinal -version

Es gibt eine lange Liste, -Xmx ist in MaxHeapSize, -Xms ist in InitialHeapSize. Filtern Sie Ihre Ausgabe (z. B. |grep unter Linux) oder speichern Sie sie in einer Datei, damit Sie darin suchen können.

101
icza

Wie Sie bereits erwähnt haben, hängt der Standard -Xmxsize (Maximum HeapSize) von Ihrer Systemkonfiguration ab.

Java8 benötigt 1/6 Ihres physischen Speichers für Ihre Xmssize (Minimum HeapSize) und einen kleineren von 1/4 Ihres physikalischen Speichers für Ihren -Xmxsize (Maximum HeapSize).

Das bedeutet, wenn Sie über einen physischen Speicher von 8 GB RAM verfügen, haben Sie Xmssize als Größer von 8 * (1/6) und Kleinerer von -Xmxsizeas 8 * (1/4).

Sie können Ihre Standard-HeapSize mit überprüfen.

In Windows :

Java -XX:+PrintFlagsFinal -version | findstr /i "HeapSize PermSize ThreadStackSize"

In Linux :

Java -XX:+PrintFlagsFinal -version | grep -iE 'HeapSize|PermSize|ThreadStackSize'

Diese Standardwerte können auch auf den gewünschten Wert überschrieben werden.

27
Sarat Chandra

Überraschenderweise hat diese Frage keine endgültige dokumentierte Antwort. Vielleicht wäre ein anderer Datenpunkt für andere von Wert, die nach einer Antwort suchen. Auf meinen Systemen mit CentOS (6.8,7.3) und Java 8 (Build 1.8.0_60-b27, 64-Bit-Server):

der Standardspeicher ist 1/4 des physischen Speichers und nicht auf 1 GB beschränkt. 

Außerdem wird -XX:+PrintFlagsFinal an STDERR gedruckt, so dass der Befehl zum Bestimmen des aktuellen Standardspeichers, der von anderen Benutzern angezeigt wird, folgendermaßen geändert werden sollte:

Java -XX:+PrintFlagsFinal 2>&1 | grep MaxHeapSize

Bei einem System mit 64 GB physischem RAM wird Folgendes zurückgegeben:

uintx MaxHeapSize                                  := 16873684992      {product}
11
brianNotBob

Auf meiner Ubuntu-VM mit 1048 MB RAM insgesamt wurde Java -XX:+PrintFlagsFinal -version | grep HeapSize gedruckt: uintx MaxHeapSize := 266338304, was ungefähr 266 MB beträgt und 1/4 meines gesamten RAM beträgt.

0
Binita Bharati

Stand 8. Mai 2019:

Die Größe des JVM-Heapspeichers hängt von der Systemkonfiguration ab.

a) Client-JVM vs Server-JVM

b) 32bit vs 64bit .

Links:

1) Aktualisierung von J2SE5.0: https://docs.Oracle.com/javase/6/docs/technotes/guides/vm/gc-ergonomics.html
2) kurze Antwort: https://docs.Oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ergonomics.html
3) Ausführliche Antwort: https://docs.Oracle.com/javase/8/docs/technotes/guides/vm/gctuning/parallel.html#default_heap_size
4) Client gegen Server: https://www.javacodegeeks.com/2011/07/jvm-options-client-vs-server.html

Zusammenfassung: (Die obigen Links sind schwer zu verstehen. Fassen Sie sie hier zusammen.)

1) Die maximale Größe des Heapspeichers für Client-JVM beträgt 256 MB (es gibt eine Ausnahme, die Sie über die obigen Links lesen können).

2) Maximale Heap-Größe für Server-JVM von 32 Bit ist 1 GB und von 64 Bit ist 32 GB (wieder gibt es auch hier Ausnahmen. Bitte lesen Sie das von den Links).

Die maximale Größe des JVM-Heapspeichers beträgt also: 256 MB oder 1 GB oder 32 GB