Einführung

Der Java Heap Speicher stellt die Menge an Arbeitsspeicher dar, welche ein Java Programm für sich in Anspruch nehmen darf. Zu dieser Speichermenge zählt jedoch nicht der Speicherbedarf, den die Virtual Machine für die Ausführung in Anspruch nimmt. Standardmäßig stehen einem Java Programm 64MByte Java Heap Speicher zur Verfügung.

Initialen und maximalen Heap Speicher festlegen

Um den initialen und maximalen Speicherplatz für den Heap-Speicher eines Programmes festzulegen können folgende Argumente der "Virtual Machine" übergeben werden:

Initaler Speicher: Xms<Speicher>
Maximaler Speicher: Xmx<Speicher>

Beispiel:
java -Xms64M -Xmx256M MeinProgramm.class
            

Hier wird die "Virtual Machine" mit einem initialen Heap Speicher von 64MByte und einem maximalen Heap Speicher von 256MByte für das Programm "MeinProgramm.class" gestartet.

Java Heap Speicher ermitteln

Das nachfolgende Beispielprogramm zeigt wie man Informationen zum Java Heap Speicher zur Laufzeit eines Programmes ermitteln kann. Dies kann insbesondere dazu hilfreich sein, um vor einer drohenden OutOfMemoryException den Anwender entsprechend zu warnen bzw. geeignete Gegenmaßnahmen zu treffen.

public class MemoryExample {
  public static void main(String[] args){
    Runtime runtime = Runtime.getRuntime();
    System.out.println("Free memory: "+runtime.freeMemory());         
    System.out.println("Max. memory: "+runtime.maxMemory());
    System.out.println("Total memoty: "+runtime.totalMemory());
  }
}
itmapa.de - X2H V 0.18

Die einzelnen Methoden der Klasse Runtime haben dabei folgende Bedeutung:

  • freeMemory()
    Der aktuell bereits reservierte Speicher, welcher noch nicht verwendet wird.

  • maxMemory()
    Der maximal reservierbare Speicher.

  • totalMemory()
    Der aktuell bereits reservierte Speicher.

Die ausgegebenen Speicher sind sind die jeweiligen Speicher in Bytes.

PermSize ( < Java 8.0 )

Dieser Abschnitt gilt für Java Versionen < 8.0 .

PermSize steht für die permanente Generation des Heap-Speichers, welcher für die permanente Objekterzeugung zur Verfügung steht und alle Reflexionsdaten für die JVM enthält. Die permanente Generation des Speichers können wir mit den JVM Startparametern XX:PermSize und XX:MaxPermSize beeinflussen.

  • XX:PermSize

    legt die anfängliche Größe der permanenten Generation fest

  • XX:MaxPermSize

    legt die maximale Größe der permanenten Generation fest

Nachfolgend ein Beispiel zur beeinflussung der permanenten Generation des Heap-Speichers.

java -XX:MaxPermSize=512m -XX:PemrSize=256m ...
            

Im Beispiel wird die anfängliche Größe der permanenten Generation auf 256 MByte festgelegt. Die maximale Größe des permanenten beträgt 512 MByte.

Die hier angegebenen Parameter XX:MaxPermSize und XX:PermSize wurden in der Java Version 8.0 entfernt.

www.heise.de
Tempo frei - Feintuning der Speicherbelegung von Java-Programmen mit visualgc
http://www.heise.de/developer/artikel/Feintuning-der-Speicherbelegung-von-Java-Programmen-mit-visualgc-227258.html


eva/3 Application Builder
Java Start Parameter
http://doc.optadata.com/de/dokumentation/application/execute/start_parameter.html