Echtzeitentwicklung mit Java, Teil 3 Realtime Java und die Wahl der Virtual Machine

Autor / Redakteur: Stefan Kuntschar * / Hendrik Härter

Die Wahl einer geeigneten Virtual Machine für Realtime Java ist nicht einfach. Doch welche Punkte müssen bei der Wahl der richtigen Virtual Machine beachtet werden?

Firmen zum Thema

Die Wahl der Virtual Machine: In welche Richtung soll es gehen? Neben Architektur und Betriebssystem stehen kommerzielle oder Open-Source-Anwendungen zur Wahl.
Die Wahl der Virtual Machine: In welche Richtung soll es gehen? Neben Architektur und Betriebssystem stehen kommerzielle oder Open-Source-Anwendungen zur Wahl.
(Foto: Egon Häbich, pixelio.de)

Realtime Java oder kurz RTJ ist mit all seinen Vorteilen gerade für Entwickler von Software für Embedded-Systeme als Alternative zu C/C++ interessant geworden. Ein wichtiger Aspekt bei der Arbeit mit Realtime Java ist die Wahl der „Virtual Machine“. Egal ob kommerziell oder Open Source, kompakt oder umfangreich, der Markt bietet bereits eine große Auswahl.

Ein Grundsatz von Java ist die Portabilität der entwickelten Software. Der Entwickler einer Applikation soll sich keine Gedanken um Hardware und Betriebssysteme machen müssen, sein Programm soll auf jedem System laufen.

Applikationen für Windows, Linux und MacOS

Damit das gelingt, wurde die „Java Virtual Machine“ (VM) definiert. Sie abstrahiert die Hardware und stellt das Interface einer oder mehrerer Java Edition(en) zur Verfügung. So gibt es zum Beispiel die Standard VM von Sun, die das Interface der „Java Standard Edition“ (J2SE) für die x86-Architektur implementiert hat, für unterschiedliche Betriebssysteme. Das sind im einzelnen Windows, Linux und MacOS.

Demnach kann ein Software-Entwickler seine Applikation auf jedem dieser Betriebssysteme entwickeln und sie wird ohne Mehraufwand auf allen anderen genannten Systemen laufen.

Der gerade genannte Vorteil soll für Embedded-Systeme genutzt werden. Dieser Gesichtspunkt ist allerdings nicht so leicht umzusetzen wie im Desktopbereich. Der Markt der Mikrocontroller bietet massenweise unterschiedliche Architekturen und (Echtzeit-)Betriebssysteme.

Die Kombination aus beiden bietet eine Artenvielfalt, die so manchen Biologen erblassen lässt. Demnach ist es für den Hersteller einer „Realtime Java VM“ unmöglich, den kompletten Markt abzudecken. Und damit ist die erste Frage, die gestellt werden muss:

Auf die Architektur und das Betriebssystem kommt es an

Bei der Wahl des Betriebssystems ist zu beachten, dass Realtime Java ein hart echtzeitfähiges Betriebssystem (RTOS) benötigt. Manche VMs setzen auch auf einen eigenen RTOS-Kernel und brauchen demnach kein darunterliegendes Betriebssystem.

Nach Festlegung dieser Entscheidung muss die anvisierte „Realtime Java VM“ auf die Unterstützung der gewählten Architektur und der Betriebssystem-Kombination geprüft werden. Wenn die gewünschte Kombination nicht unterstützt wird, kann eine Anfrage auf Portierung der „Realtime Java VM“ beim jeweiligen Hersteller auch noch zum Erfolg führen. Dies ist allerdings abhängig vom jeweiligen Hersteller, von der Projektgröße, der Zukunftstauglichkeit der Kombination und/oder der Zahlungswilligkeit.

Kommerzielle oder eine Open Source Virtual Machine?

Ein weiterer wichtiger Gesichtspunkt ist die Frage, ob eine kommerzielle oder eine Open Source "Realtime Java VM" genutzt werden soll. Beide Varianten haben ihre Vor- und Nachteile. Eine Open Source „Realtime Java VM“ ist kostenlos und hat auf Grund des Open-Source-Gedankens wenige Bugs, die nach Bekanntgabe meist schnell ausgebessert werden. Nachteilig wirkt sich dabei aus, dass eine Portierung auf eine noch nicht unterstützte Architektur/RTOS-Kombination nicht einfach in Auftrag gegeben werden kann.

Hier sind die Freundlichkeit der Entwickler des Projektteams sowie das Interesse an dieser Portierung von Bedeutung. Ein zweiter Nachteil ist der Support. Bei einem Open-Source-Projekt ist kein Support über Jahre gewährleistet. Projekte können zum Beispiel aus Zeit- oder Geldmangel des Entwicklerteams ohne Vorankündigung eingestellt werden. Eine kommerzielle „Realtime Java VM“ kostet Geld, bietet aber häufig eine flotte Portierung und jahrelangen Support.

Auf der nächsten Seite lesen Sie: Vergleich von kommerziellen und quelloffenen Virtual Machines

Vergleich von kommerziellen und quelloffenen Virtual Machines

Bevor wir auf weitere Unterschiede der VMs eingehen, sollen beispielhaft einige bekanntere VMs sowohl aus dem kommerziellen als auch aus dem Open-Source-Bereich genannt werden. Im Open-Source-Bereich gibt es beispielsweise ovm und Jrate.

Das ovm-Projekt startete als eines der ersten VM-Projekte auf Basis eines Open-Source-Systems mit dem großen Ziel, eine Open Source Realtime Java VM zu entwickeln. Damit das Ziel umgesetzt werden konnte, kooperieren mehrere Universitäten und Firmen. Momentan ist es um dieses Projekt sehr ruhig geworden. Wie oben erwähnt, ist seit dem letzten Update einige Zeit vergangen.

Drei kommerzielle VMs – weiche und harte Echtzeitanwendungen

Das jrate-Projekt hingegen besitzt eine aktive Community, die Updates und neue Portierungen entwickelt. Es wurde auf der Entwicklerplattform Source Forge ins Leben gerufen.

Der kommerzielle Bereich bietet alteingesessene Hersteller sowie Newcomer: Aicas JamaicaVM, Aonix PERC, Is2t MicroEJ und IBM Genuine.

Die zurzeit am häufigsten eingesetzten VMs sind die JamaicaVM, PERC und Genuine. Dabei wird die IBM Genuine VM vor allem für Projekte mit weichen Echtzeitanforderungen verwendet, während die JamaicaVM und die PERC bei harten Echtzeitanforderungen zum Einsatz kommen.

JamaicaVM und PERC unterscheiden sich in mehreren Punkten. Die JamaicaVM ist eine der ältesten Realtime Java VMs am Markt. Sie ist inzwischen sehr weit fortgeschritten und bietet eine breite Fülle an Architektur/RTOS-Kombinationen. Seit Version 6 kommt sie ohne Betriebssystem aus, da sie über einen Realtime Kernel verfügt. Des Weiteren hält sie die RTSJ in allen Punkten ein und unterstützt den Standard „Java Development Kits“ und „Connected Limited Device Configuration“.

Vor- und Nachteile von PERC und JamaicaVM

Bei so viel Fülle dürfen gute Konfigurationsmöglichkeiten nicht fehlen, um auf den kleinsten Systemen den Speicherplatz optimal zu nutzen. Erwähnenswert sind die Entwicklungstools. Die JamaicaVM bietet Entwicklungshilfen, wie einen Analyzer und Profiler. Dieser schätzt den Speicher ab und optimiert diverse Debug-Hilfen wie den Thread Monitor zur Evaluierung des Zeitverhaltens der Applikation. Ein zusätzliches Gimmick wird allen Eclipse-Entwicklern angeboten. Hierbei handelt es sich um ein Plugin für die bekannte IDE, das die Konfiguration und Verwaltung der JamaicaVM erleichtert.

Die PERC ist in vielen Punkten der Gegensatz. Sie ist ebenfalls bereits in vielen Architektur/RTOS-Kombinationen verfügbar. Außerdem existieren mehrere unterschiedliche Ausstattungspakete, wie die PicoPERC und die NanoPERC. Sie hält sich nicht gänzlich an die RTSJ und liefert viele Klassen mit eigener Interpretation. Dafür ist die PERC sehr schmal und gut durch C++ erweiterbar. Im Gegensatz zur JamaicaVM kann die PERC durch Annotationen im Source Code den Speicherverbrauch der Applikation noch in der Implementierungsphase sehr gut abschätzen.

Eines haben alle Realtime Java VM Hersteller gemeinsam. Sie erzeugen am Ende des Build-Vorganges ein Binary, welches auf das Target geladen wird und sowohl die VM als auch die Applikation und dazugelinkten C/C++-Code enthält. Durch die für Java untypische statische Verlinkung wird die Codegröße optimiert und das Zeitverhalten der Applikation vorhersagbar. Dies wäre beim sonst eingesetzten dynamischen Linken nicht ohne Weiteres möglich.

* * Stefan Kuntschar ist Softwareentwickler bei Mixed Mode in München.

Artikelfiles und Artikellinks

(ID:29885310)