My entire career has been pretty much focused on embedded devices. A majority of it was focused on Java for embedded devices. After that I spent some time working with flash on embedded devices. I got to thinking about these applications on embedded boards, and why customers would choose them over just writing straight C/C++ code to accomplish what they needed.
The reason I was questioning this is that neither language is ideal for an embedded board. Both appeared to be designed with the web in mind, and therefore the focus was probably on server type machines. Server type machines are on the complete opposite end of the spectrum to those of embedded devices. You have to wonder, when they were designing Flash and Java, did they have embedded machines in mind? Probably not, and therefore their design is probably not suited for an embedded device. Rather, an attempt has been made to retro fit them to work within embedded confines. I believe that this leads to inefficient use of resources on an embedded device. For example, garbage collection in a real time environment.
Not only that, but both frameworks abstract the OS away from the end user. Both were designed with uniform behavior in mind. What I mean is that when you write a Java or flash application, it is supposed to run the same way regardless of where it is run. In some cases this could lead to a marginalization of a particular OS's strength. For example, Java code run on QNX will have timers behave the same way as they do on Linux or Windows. You are losing some of the benefits of the real time nature of QNX in this case.
This is an advantage that our runtime has. It has been designed with embedded devices in mind. The decisions that have been made, are those that best benefit running in a constrained environment. Plus we have runtimes for a bunch of targets, so you still don't have to worry about the "what if I have to switch platforms" question, or the "what if my developer wants to work on Windows, or Linux" issue.