2013-02-05 6 views
6

Ich erhöhte das Speicherlimit für Java Xmx, wenn eine Ausnahme wegen unzureichenden Heapspeichers ausgelöst wurde. Ich habe jedoch derzeit eine sehr lange Ausführungszeit, die möglicherweise mit dem Speicher verbunden ist, aber ich habe die Ausnahme (noch) nicht gesehen.Vertauscht die JVM den Heap?

Ich frage mich, was für die lange Ausführungszeit verantwortlich sein kann. Vertauscht die JVM den Heap auf die Festplatte?

Ich verwende HotSpot 1.6.0 Update 34.

+0

Swapping ist ein Betriebssystem Verhalten nehme ich an. – StarPinkER

Antwort

11

Die JVM kann nicht auf die Festplatte wechseln, nein. Das Betriebssystem kann dies tun. Sie können dies erkennen, indem Sie die Betriebssystemstatistiken für den Prozess überprüfen.

Da die JVM nicht mehr genügend Arbeitsspeicher hat, wird die Speicherbereinigung immer häufiger ausgelöst. Jeder Durchlauf gibt weniger Speicher frei und erhöht die GC-Rate weiter. Schließlich wird viel Zeit in GC verbracht, was wahrscheinlich die Verlangsamung ist, die Sie sehen.

Die JVM wartet nicht, bis 0 Bytes freigegeben sind, um OutOfMemoryError zu werfen. Es wird tatsächlich aufgeben, wenn GC einfach zu lange dauert im Vergleich zur Anzahl der freigesetzten Bytes.

2

Eine mögliche Folge eines größeren Haufen ist eine Erhöhung der GC Zeiten - die JVM hat einen größeren Raum zu analysieren, so dass es länger dauert - insbesondere, wenn sie ein Stop-the-World GC.

Können Sie Ihre Frage etwas konkretisieren?

Welche Heap-Größe verwenden Sie? Welche Dauer siehst du? Was ist das Verwendungsmuster von Objekten in Ihrer Anwendung? Ein paar langlebige Objekte oder viele kurzlebige Objekte zum Beispiel.

+0

Ich setze Xmx auf 2GB und ich versuche gerade mit 3GB zu versuchen. Bei der Ausführung mit einem einzelnen Thread wurde die Ausnahme für den Heapspeicher mit 2 GB ausgelöst. Ich habe 15 Minuten mit 3GB gelaufen und es hat nicht geworfen, aber ich kann nicht sicher wissen, ob 3GB ausreichend ist, da die gesamte Ausführungszeit Hunderte von Stunden betragen würde. Wenn die Hochwassermarke wahrscheinlich um 15 Minuten überschritten wird, scheint es sinnvoll, 3 GB als Grenze für meinen Raster (9 Knoten) zu verwenden. Ich werde 9 Objekte auf 9 Knoten haben, hoffentlich 1/9 der Dauer. – H2ONaCl

Verwandte Themen