Welche Vorteile bietet die Angabe des Speicherlimits von Java Virtual Machine?

8

Ich habe das Standardspeicherlimit der Java Virtual Machine beim Ausführen der Java-Anwendung so eingestellt ...

%Vor%

Ich weiß, dass dies den maximalen Speicherzuweisungs-Pool auf 128 MB setzen wird, aber ich weiß nicht, welchen Vorteil es hat, dieses Speicherlimit von JVM anzugeben?

Bitte erleuchten Sie mich in dieser Ausgabe ...

    
Saravanan 14.09.2011, 07:19
quelle

5 Antworten

8

Auf Suns 1.6 JVM, auf einer Server-Klasse-Maschine (gemeint ist eine mit 2 CPUs und mindestens 2 GB physikalischer Speicher ) ist die standardmäßige maximale Heap-Größe die kleiner 1/4 des physischen Speichers oder 1 GB . Mit -Xmx können Sie das ändern.

Warum möchten Sie die Speichermenge begrenzen, die Java verwendet? Zwei Gründe.

Erstens, Java's automatische Speicherverwaltung tendiert dazu, so viel Speicher wie möglich vom Betriebssystem zu holen und es dann für das Programm zu verwalten. Wenn Sie andere Programme auf dem gleichen Computer wie Ihr Java-Programm ausführen, werden Sie mehr als nur einen Teil des Speichers belegen und Druck auf sie ausüben. Wenn Sie mehrere Kopien Ihres Java-Programms ausführen, werden sie miteinander konkurrieren, und Sie können einige Instanzen mit Speichermangel enden. Wenn Sie die Größe des Heapspeichers begrenzen, können Sie das verwalten: Wenn Sie über 32 GB RAM verfügen und vier Prozesse ausführen, können Sie jeden Heap auf etwa 8 GB begrenzen (ein bisschen weniger wäre besser) und sich darauf verlassen, dass alle davon funktionieren bekomme die richtige Menge an Speicher.

Zweitens (ein anderer Aspekt der ersten, wirklich), wenn ein Prozess mehr Speicher ergreift, als das Betriebssystem aus dem physischen Speicher liefern kann, verwendet er virtuellen Speicher, der auf die Festplatte ausgelagert wird. Das ist sehr langsam. Java kann seine Speichernutzung reduzieren, indem es seinen Garbage Collector härter arbeiten lässt. Dies ist auch langsam - aber nicht so langsam wie auf der Festplatte. Sie können also die Größe des Heapspeichers begrenzen, um zu verhindern, dass der Java-Prozess ausgelagert wird, und so die Leistung verbessern.

    
Tom Anderson 14.09.2011, 07:36
quelle
4

Für die JVM wird eine standardmäßige Heap-Größenbeschränkung definiert. Mit dieser Einstellung können Sie sie überschreiben. In der Regel können Sie angeben, dass mehr Speicher dem Java-Prozess zugewiesen werden soll.

    
krock 14.09.2011 07:22
quelle
3
  1. Dies legt die maximale Heap-Größe fest. Die gesamte VM könnte größer sein
  2. Es gibt immer ein Limit, weil dieser Parameter einen Standardwert hat (zumindest für die Oracle / Sun VM)
  3. Der Vorteil könnte also sein: Sie können der App den Speicher geben, den sie tatsächlich benötigt, um (effizient) zu arbeiten, oder wenn Sie aus der anderen Richtung kommen: (ein wenig) begrenzen Sie den maximal genutzten Speicher die Verteilung von Ressourcen zwischen verschiedenen Anwendungen auf einer Maschine.
Jens Schauder 14.09.2011 07:25
quelle
2

Es gab bereits eine Frage zu Java und Speicher SO: Java-Speicher erklärt

Ein sehr schöner Artikel über Java-Speicher findet sich hier . Es gibt einen Überblick über das Gedächtnis, wie es benutzt wird, wie es gereinigt wird und wie es gemessen werden kann.

Die Standardeinstellungen des Speichers sind (vor Java 6):

  

-Xms Größe in Bytes Legt die anfängliche Größe des Java-Heapspeichers fest. Das   Standardgröße ist 2097152 (2 MB). Die Werte müssen ein Vielfaches von und sein   größer als 1024 Bytes (1 KB). (Das -server Flag erhöht die   Standardgröße bis 32M.)

     

-Xmn Größe in Bytes Legt die anfängliche Java-Heap-Größe für Eden fest   Generation. Der Standardwert ist 640 KB. (Das -server-Flag wird größer   die Standardgröße auf 2M.)

     

-Xmx Größe in Bytes Legt die maximale Größe für den Java-Heap fest   wachsen. Die Standardgröße ist 64M. (Das -server Flag erhöht die   Standardgröße bis 128M.) Das maximale Heap-Limit beträgt ca. 2 GB (2048 MB).

Eine andere Quelle ( hier ) besagt, dass in Java 6 die Größe des Standard-Heapspeichers von der Größe des Systemspeichers abhängt.

    
Oosterman 14.09.2011 07:34
quelle
1

Ich nehme an, dass dies helfen sollte, einen hohen Speicherverbrauch zu vermeiden (aufgrund von Fehlern oder aufgrund vieler Zuweisungen und Freigaben). Sie würden dies verwenden, wenn Sie für ein System mit wenig Arbeitsspeicher entwerfen (z. B. einen alten Computer mit wenig Arbeitsspeicher, Mobiltelefonen usw.).

Alternativ können Sie das Standard-Speicherlimit erhöhen, wenn es nicht genug für Sie ist und Sie OutOfMemoryException s für normales Verhalten erhalten.

    
Eran Zimmerman 14.09.2011 07:24
quelle

Tags und Links