Ein Java Compiler für AVR hast du rein theoretisch mit gcc.
'avr' ist ein bekanntes backend für GCC und 'java' ein bekanntes frontend. Das bedeutet aber nicht notwendig, daß beides ohne Arbeit und Erweiterungen im GCC zusammen gestöpselt werden kann.
  • Zieh dir die gcc-Quellen
  • configure ... --enable-languages=c,c++,java ...
  • Habe viel Spaß bis du nen avr-gcc gebuildet bekommst.
  • Schreibe dir native interfaces um auf die Hardware (SFRs, IO) durchzugreifen und Interrupts abzubilden.
  • Besorg dir ne libjava, die dir die Standard Java-Objekte liefert.
  • Du wirst auch einen gc brauchen, zB den boehm-gc
  • java wird eine Speicherverwaltung wollen.
  • Und wie siehts mit Threads und Nebenläufigkeit aus?

GCC übersetzt java-Quellen klaglos nach obj, das Zeugs zu linken ist schon nicht mehr so einfach.

Java ist natürlich nett und wenn ich die Wahl hab, dann nehme ich Java und mach nen grossen Bogen um C und C++. Aber Entwicklung für Embedded ist was ganz anderes als auf einem PC zu arbeiten, der dir klaglos 20MByte per malloc() liefert. Zwar gibt es 32-Controller, die Java fahren, aber mit AVR spielt man da in einer anderen Liga.

Ein Großteil an Hardwareunabhängigkeit liefert dir auf dieser Ebene schon C.

Ist Java wirklich das was du willst?
Was ist so schlimm an C für einen 8-Bitter?