Warum wird eigentlich immer behauptet; java sei langsam?

Langsam ist nicht eine Sprache, sondern bestenfalls der erzeugte Code bzw. die Tatsache, daß Java idR nicht nativ läuft, sondern der Bytecode durch eine VM interpretiert wird.

Nirgwndwo steht geschrieben, daß Java in Bytecode vorliegen muss. Ebenso gut ist es möglich, Java-Programme direkt in ausführbaren Code zu übersetzen, also in Code, der nicht für die Maschine JavaVM codiert, sondern zB für einen AVR.

Die Plattformunabhängigkeit geht dabei verloren, aber auf einem System wie AVR hätte man die eh nicht. ZB hat nicht jeder AVR einen PortA oder einen LCD-Controller.

Daß Java (und auch Bytecode) nach Object-Code übersetzt werden kann, zeigt GCC.

GCC unterstützt standardmässig mehrere Sprachen: C, C++, Java, Ada, Fortran, Objective C, C#, irgendwann vielleicht D, ...

GCC unterstützt zudem viele Prozessoren/Controller, u.a. bekanntlich AVR und nennt sich dann avr-gcc.

Eigentlich ist es doch naheliegend, auch mal zu sondieren, inwieweit die bestehenden GCC-Teile "Sprache" (Frontend) und "Maschine" (backend) zusammengebracht weden können.

Der große Haken beim nativen Übersetzen von Java ist hier die libjava, welche die Unterstützung für das Zeug wie java.io.*, java.awt.*, Threads, Serialisierung, RMI, Reflection, etc enthält. Die Arbeit würde also darin bestehen, einen ausgesuchten Teil der libjava-Quellen mit avr-gcc zu übersetzen zu einer libavrjava oder so, die dann gegen die aus den Java-Quellen erzeugten Objekte gelinkt werden könnte, um eine ausführbare Datei zu erhalten.

Die Erweiterungen im Compiler selbst dürften nicht allzu groß sein; standard-Hooks für zB Exceptions und unrolling der eh-frames sind ja vorhanden. Evtl ist es auch möglich, auf exception zu verzichten, wie avr-gcc es bei C++ macht. Zudem ist die AVR-Maschinenbeschreibung im GCC praktisch unabhängig vom der Sprache und bereits vorhanden (anders wäre es unmöglich, so viele Kombinationen von Programmiesprachen und Controllern in GCC zu unterstutzen).

Auf Ebene der binutils (Assembler, Linker) wäre noch weniger bis garnix zu tun, evtl würden neue Linkerscripte schon reichen.