Java for Embedded Solutions
C isn't the only choice for embedded development. Java has been a valid choice for years, for devices of all sizes.I recently received a question asking about the pros and cons of developing software for an embedded device with Java. To answer the question, I first pointed out that Java remains the most popular development language in the world for enterprise and web application development, as well as in mobile and embedded solutions. Yes, I've seen the recent survey by TIOBE, but its criteria is based on search engine results, and it may not be an accurate indicator of just which language is most used.
In summary, with millions of Java developers world-wide, and literally billions of devices of all sizes deployed with Java virtual machines (VM), Java is arguably the most widely used environment in the embedded space.
Oracle offers Java Micro Edition (ME) for some of the smaller devices such as cell phones, but they also offer Java SE Embedded for embedded use in more capable systems. It differs from standard Java SE in that it requires less storage space to install and less memory to run. But otherwise, it's nearly identical to desktop Java, which makes it easier to develop for. Oracle offers headless versions that are even smaller in footprint for embedded devices with no UI requirements. There's also support for embedded Linux and Windows releases, and processors such as ARM, PowerPC, MIPS, along with Intel x86 and Atom. See the following page for a matrix of supported OS and processor combinations: http://java.sun.com/javase/downloads/embedded.jsp
JIT Compilation - Sometimes Faster than C/C++
Other Java SE Embedded differences include internal tuning to run well on devices with constrained resources such as processor, storage, and memory capacity. This includes tuned versions of functionality Java developers have come to expect from a Java VM, including automatic garbage collection, and HotSpot just-in-time (JIT) code compilation. HotSpot compiles your application's class bytecode to native machine language that allows it to run equally well when compared to compiled C applications. In many cases, Java applications can even exceed the performance of C/C++ applications because the Java code is compiled and optimized according to dynamic run-time conditions. C applications are compiled and optimized statically, where as the JVM continually optimizes your application as it executes over time.
All of these features make Java an ideal language and platform for even the smallest of embedded devices. Take a look at this page for more information, along with trial downloads for different OS and processor combinations: http://java.sun.com/javase/embedded/index.jsp
Happy Coding! -EJB