Tip: Optimierte Freigabe von unbenötigtem Heapspeicher durch die SUN Java VM

Dieser Text nennt zwei JVM Parameter, mit denen man eine optimierte Freigabe von unbenötigtem Heapspeicher erzielen kann.

Die SUN Java VM gibt angeforderten Speicher selten wieder frei. Dieses Verhalten läßt sich beim Ausführen vieler Java Applikationen beobachten, auch beim SVG-Viewer Squiggle. Der Speicher, den Squiggle für große SVG-Bilder anfordert, könnte nach dem Laden eines kleineres Bildes dem Betriebssystem zurückgegeben werden und so anderen Applikationen zur Verfügung stehen.

Das gewünschte Verhalten läßt sich durch Feineinstellung zweier SUN JVM-Parameter erzielen (hier SUN JVM 1.4.2). Die beiden benötigten Parameter heißen:

Mit einer niedrige MaxHeapFreeRatio gibt die JVM unbelegten Speicher eher wieder frei. Eine niedrige MinHeapFreeRatio vermeidet zu großzügige Speicheranforderungen. Der nachfolgende Test wurde mit diesen Werten durchgeführt:

Die entsprechende Startzeile:

java -XX:MaxHeapFreeRatio=20 -XX:MinHeapFreeRatio=10 -Xloggc:log.txt -Djava.ext.dirs=libs -jar batik-squiggle.jar

Testszenario

Der SVG-Viewer Squiggle 1.5.1 wird gestartet. Im ersten Testlauf wird die JVM ohne zusätzliche Startparameter gestartet, d.h. die oben aufgeführten Defaultwerte 70, 40 der JVM werden verwendet. Im zweiten Testlauf werden die Freigabe-optimierten Werte 20, 10 verwendet. Zur Beobachtung des Speicher-Anfordungs- und -Freigabe-Verhaltens werden folgende Tools benutzt:

In beiden Fällen wird dasselbe Testskript verwendet (Ausführungsdauer ca. 3 Minuten):

Fazit

Ohne Speicheroptimierung beansprucht die JVM 80,2 MB. Unbenutzter Heapspeicher wird nicht wieder freigegeben. Der speicheroptimierte Testlauf benötigt nur 63,5 MB, von denen ca. 21,9 MB wieder freigegeben werden. Die Speicheroptimierung führt zu sparsamer Anforderung von Heapspeicher, auch wird unbenutzter Heapspeicher schneller wieder freigegeben. Den Vorteil der Speicheroptimierung erkauft man sich durch häufigere Heap-Anpassungsprozesse.

GCViewer: Testlauf 1 ohne Speicheroptimierung

Process Explorer: Testlauf 1 ohne Speicheroptimierung





GCViewer: Testlauf 2 mit Speicheroptimierung

Process Explorer: Testlauf 2 mit Speicheroptimierung

Metainformatik · Kontakt/Impressum · Datenschutzerklärung