Krolli's Blog

Alles und noch viel mehr….

Der Java Heap

Der Java Heap ist der Speicherbereich welcher einer Java Laufzeitumgebung zur Verfügung steht. In diesem Speicherbereich werden alle Datenstrukturen mit einer nicht festen Größe verwaltet.

  • Objekte (Instanzen von Klassen)
  • Felder von Basistypen oder Objekten
  • Zeichenketten

Wenn ein Java Programm gestartet wird steht im zunächst die Startgröße des Heaps zu Verfügung, Java kann diesen aber selbst bis zur Maximalgröße erweitern. Bei nicht Server basierenden Java Anwendung kann die Heapgröße über die Parameter -Xms bzw. -Xmx (initiale Heapgröße -Xms, maximale Heapgröße -Xmx).


Mit folgenden Code Beispiel lässt sich feststellen wie viel Speicher einem Java Programm zur Verfügung steht:
[snippet id=“44″]

Zu beachten ist hier, dass der „Garbage Collector“ ineffektiver arbeitet je größer der Heap ist. Das heißt das der Höchstwert möglichst mit dem tatsächlich verwendeten Speicherverbrauch übereinstimmt. Aus Java-Sicht gibt es einen „zu großen“ maximalen Java-Heap im Grunde nicht. Ist ein Wert eingestellt, der selbst bei Maximalbelastung niemals verwendet wird, so wird Java die potentielle Größe seines Heaps niemals voll ausschöpfen.

An dieser Stelle sollte auch beachtet werden, dass es Plattformabhängige Limitationen für Heap-Größen gibt, die zumeist mit dem maximal adressierbaren Speicher von Prozessen im verwendeten Betriebssystem zusammenhängt. So können Prozesse auf 32-Bit-Betriebssystemen in der Regel maximal 2 GB privaten Speicherplatz beanspruchen. Da in einer Java-VM jedoch nicht nur der Heap Speicherplatz verbraucht, kann ein Java-Heap auf diesen Systemen niemals die gesamten 2 GB ausschöpfen sondern maximal einen deutlich kleineren Wert. Wie hoch diese Zahl ist hängt vom Overhead der jeweilig verwendeten VM ab.
Ein relativ sicherer Höchstwert, der mit allen VMs funktionieren sollte, sind 1,4 GB auf 32-Bit-Systemen.

 

Links

http://docs.oracle.com/javase/8/
Troubleshooting Memory Leaks
https://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/memleaks.html

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.