C is an amazing blessing in comparison ;-) I assume Java is minimally different.
That's right, sorry for confusing you in my previous post.
Of course it were a different challenge for a java teacher to do an excursion into microcontroller assembly language, eeprom handling and such stuff.
In that respect Java and C are "minimally different".
The point I wanted to emphasize is that programming microcontrollers is about being aware of the limits.
c and AVR c/c++ are trying to hide such limits, but Java is one abstraction layer beyond (e.g. "garbage").
For me, c is a good compromise between ease of usage, and still being aware of what's going on.
what is the difference between running java bytecode in a JVM on an arduino versus a JVM on i386
None, that's what a JVM is for. The goal of a JVM is to hide any difference. Which makes it worse as soon as the differences (limits) show up.
The more I think about it, this is also the goal of the Arduino IDE.
The first experience (blink) showing how easy it is to control real things ( LEDs ) is something that fascinates long before becoming aware of limits.
If Blink.java is less than 5 lines of code, and it's as easy to upload, go for that, even if it requires a big microcontroller to host the JVM.
If you want to show there's something else fascinating, only "minimally different" to Java, show them Arduino.