Entwickelt man für Android Performance-kritische Anwendungen fühlt man sich schnell in die Anfangszeit von Java zurückversetzt. Man muss auf die ein oder andere “Komfort”-Funktion verzichten, die man von aktuellen Java VMs gewohnt ist. In Android sind diese zwar vorhanden, aber müssen gegen Performance-Einbußen abgewägt werden. Dies liegt vor allem daran, das Android’s Dalvik VM nicht mit aktuellen und hoch optimierten JVMs mithalten kann. In gewissen Punkten erinnert Dalvik an eine VM von Java 1.0 oder 1.1, die vor über 10 Jahren aktuell waren. Viele dieser Punkte hat Google im Dokument Designing for Performance zusammengetragen. Hier finden sich dann unter anderem folgende Ratschläge, die sich leider auch negativ auf die Produktivität und Codequalität auswirken:

  • Man soll vermeiden Objekte zu erzeugen
  • Nativer Code ist wesentlich schneller als Bytecode
  • Man soll getter/setter vermeiden, ebenso enums
  • foreach soll man nur mit Arrays benutzen
  • Man soll final und static benutzen

Mit Optimierungen auf dieser Ebene wird man als Java Entwickler eigentlich nicht mehr konfrontiert, weil das eine modere JVM im Griff hat. Aber gerade wenn man Spiele entwickelt und stabile FPS (frames per second) Raten wichtig sind, wird man sich anpassen müssen. Aus eigener Erfahrung muss ich das leider bestätigen. Inbesondere ist es überlebensnotwendig die Objektneuanlage auf ein Minimum zu reduzieren. Sonst blockiert der Garbage Collector regelmäßig für ~150ms komplett alles, und jede flüssige Animation ist dahin. Deshalb muss man übrigens auch sehr aufpassen welche anderen Applikationen als Hintergrundprozesse (Services) laufen, denn die können die eigene Applikation genauso außer Gefecht setzten!

Bei allem Respekt und Anerkennung gegenüber der Android Plattform, wirkt die Dalvik VM alles andere als zeitgemäß. Auch dass Dalvik derzeit ausschließlich Code interpretiert ausführt schreit nach einem JIT oder Hotspot Compiler. Sun hat das seit 10 Jahren und selbst die kleinen VMs von Java ME sind mit JIT und Hardware beschleunigter Bytecode-Ausführung schon lange einiges weiter. Es bleibt zu hoffen das Google beziehungsweise die Open Headset Alliance Dalvik bald auf den aktuellen technologischen Stand bringt.

Keine Kommentare möglich.