Java Speichermanagement

Eine von opus 5 betreute Abschlussarbeit erforscht das Java Speichermanagement. Die Ergebnisse nutzen wir für eine verbesserte Speicherkontrolle sowie effektivere Cache-Mechanismen in unseren J2EE Applikationen.

Selbstverwaltung des Arbeitsspeichers kann zu Programmabstürzen führen

Ein Java-Programm bezieht seinen Arbeitsspeicher innerhalb vorgegebener Grenzen aus dem Systemspeicher des jeweiligen Servers. Die weitere Nutzung dieses Speichers wird vollständig von Java selbst verwaltet. Gerät nun das Programm an die Grenzen dieses selbstverwalteten Speichers, kann es zu Problemen kommen, die das Programm zum Absturz bringen können. Dies geschieht, wenn der Arbeitsspeicher eines Java-Programms zum „Cachen“ (Zwischenspeichern) größerer Datenblöcke aus einer Datenbank genutzt wird. In Java gibt es dazu keine eingebauten Warn- oder Steuermechanismen, so dass diese selbst implementiert werden müssen.

Entwicklung eines Speicheranalyse- und Steuerungselements

Deshalb hat opus 5 hierzu Analyse- und Steuerungselemente entwickelt, die u.a. in dem Open-Source Content Management System „bandika“ integriert wurden.

Im Analyse-Bereich schätzen Mechanismen den bereits belegten sowie den noch zur Verfügung stehenden Speicher genau ab. Dies erzeugt Warnungen, falls der Speicher im Programmablauf zu knapp zu werden droht. Dann schränkt das jeweilige Programm den Speicherkonsum ein und vermeidet so einen Absturz.

Ermittlung des zusätzlichen Speicherbedarfs

Gleichzeitig wurden Mechanismen entwickelt, mit denen ein Programm seinen zusätzlichen Speicherbedarf innerhalb gewisser Grenzen vorausberechnen kann. Dadurch konnte vor allem das erwähnte Caching großer Datenblöcke optimiert werden:

In den meisten Datencaches erfolgt eine gewisse Kontrolle durch das Mitzählen der gespeicherten Elemente. Wird eine gewisse Zahl überschritten, werden die ältesten oder am wenigsten benutzen Elemente entfernt, um neuen Platz zu schaffen. Da die einzelnen Elemente aber eine sehr unterschiedliche Größe haben können, ist diese Methode kein zuverlässiger Schutz vor einem Speicherüberlauf.

Anpassung an reale Speichergröße

Durch die neue Möglichkeit, die Größe von zu speichernden Elementen vorauszuberechnen, kann ein Cache seine Kapazität an der realen Speichergröße aller Elemente anstatt an ihrer Anzahl orientieren. Dadurch kann ein Cache den zur Verfügung stehender Speicher sehr viel besser ausnutzen, ohne Speicherüberläufe und damit Programmabstürze befürchten zu müssen.

Solche neuen Caches wurden im o.g. CMS integriert, wobei zusätzlich Administrationswerkzeuge eingebaut wurden, mit denen der pro Cache benutzte Speicher zur Laufzeit zu kontrolliert und seine Maximalgröße verändert werden können.

Gerne beraten wir Sie bei Ihrem Projektvorhaben. Wir freuen uns auf Ihre Kontaktaufnahme!