01.04.2011
00:00

Die Java-Cloud-Collection-API

Die Java-Cloud-Collection-API

Roman Seibold, Senior Consultant und technischer Leiter der Schulungsabteilung von aformatik

von Roman Seibold

Leider handelt es sich bei dem nachfolgenden Artikel um einen Aprilscherz. Weil der Grundgedanke dahinter aber sehr verführerisch ist, lassen wir den Text mal solange hier stehen, bis Oracle so etwas tatsächlich implementiert :-) Trotzdem wird man bei dem Cloud-Thema doch die eine Frage nicht los: "wo genau sind denn meine Daten jetzt bitteschön?"

Eine Neuigkeit für alle Interessierte: seit Java 6.0.24, der seit einigen Tagen verfügbaren neuesten Java-Version, sind für das Collection-Framework auch Cloud-Funktionen hinzugekommen und es wurden, der üblichen Sun- bzw. Oracle-Philosophie für Minor-Updates zum Trotz, neue Klassen im Paket java.util hinzugefügt.

Ausgangssituation war wohl die Klage vieler Firmen, die sich gerade im serverseitigen Bereich auf Java verlassen, das häufige Auftreten der gefürchteten java.lang.OutOfMemoryErrors. In vielen solcher Fehlersituationen hat sich bei Analysen von Heap-Dumps gezeigt, dass der Speicher hauptsächlich von Collections belegt war und dass die Daten von diesen Collections eben, da noch "hart" referenziert, bei einem Garbage Collector-Lauf nicht freigegeben werden können.
Was liegt da näher, als die Daten in die Cloud auszulagern? Damit wird der knappe Speicherplatz auf dem lokalen Server wieder verfügbar und ein OutOfMemoryError ist hoffentlich Geschichte.
Neu im API sind u.a. die Klassen CloudList und CloudSet. Hier ein kleines Beispiel:

List<HeavyObject> list = 
CloudList<HeavyObject>.createSomewhere();
list.add(new HeavyObject(...));

Im obigen Beispiel kann man sehen, dass man die CloudList nicht mit new anlegt, da ansonsten deren Daten ja im lokalen Speicher verortet wären. Die createSomewhere- Methode agiert hier als Factory, die es gestattet, den günstigsten und schnellstmöglich erreichbaren Speicher zu allozieren und liefert die passende Implementierung. Danach "belastet" nur noch ein Proxy-Objekt den lokalen Speicher, der Rest der Daten liegt in der Cloud.

Damit auch bereits bestehende Collection-Klassen wie ArrayList, HashSet und co. vom neuen Feature profitieren können, wurde die Implementierung der bestehenden Klassen von Oracle einfach erweitert, bleibt dabei aber vollständig rückwärtskompatibel. Ein- und Ausschalten kann man die Erweiterung jetzt über ein System-Property use.cloud.feature, womit auch Altanwendungen ganz leicht in die Cloud gebracht werden können.
Integrieren Sie das System-Property ganz einfach in Ihre bisherige Kommandozeile, z.B.

java -Xmx512m -Duse.cloud.feature=true de.aformatik.Start  

Interessant ist das Feature natürlich vor allem im Einsatz auf Application Servern, z.B. bei WebSphere oder JBoss. Hier muss man natürlich an unterschiedlichen Stellen eingreifen, um die etwas versteckte Startkonfiguration zu erreichen und damit das Property eintragen zu können. Bei WebSphere wäre das entweder über die Admin-Konsole unter server > Java and Process Management > Process Definition > Java Virtual Machine oder direkt in der Datei server.xml, dort unter

<jvmEntries ... 
genericJvmArguments="-Xquickstart -Duse.cloud.feature=true">

Bei JBoss wäre dies ein Eintrag in der run.conf-Datei, dort einfach in der JAVA_OPTS-Variable die entsprechende Ergänzung machen.


So, das wars für dieses Mal. Wir wären natürlich sehr interessiert daran, ob und wie sich das Speicher- und Laufzeitverhalten Ihrer Applikationen verändert. Schreiben Sie uns doch einfach einen Kommentar und tauschen Sie mit anderen Interessierten Ihre Erfahrungen aus.
Wir freuen uns schon auf neue Erkenntnisse!

  •  
  • 1 Kommentar(e)
  •  
Alexander Frey
01.04.2011
11:38
Patent bereits angemeldet

Anscheinden hat Oracle sich diese Technik bereits patentieren lassen (Patent US 1,042,011). Wahrscheinlich will Oracle auf diese Weise verhindern, dass Google diese API in Android einbaut. Gerade "kleine Geräte" werden schließlich besonders von der Java-Cloud-Collection-API profitieren.

Mein Kommentar

Zurück