For an embedded system that goes in an instrument, we need to think about what the instrument needs. In embedded systems you have a lot of constraints. Sun isn't very flexible. You have to ship what they tell you to ship. One of the biggest problems with Java for embedded systems is that Java's automatic garbage collection makes it extremely difficult to write real-time applications.
Garbage collection is the process of reclaiming memory from objects that are no longer needed.
It makes life easier on software developers than the alternative, which is to have the programmers handle memory management, but it also occupies the system for unpredictable lengths of time at unpredictable intervals. Hewlett-Packard's virtual machine uses a variant called incremental garbage collection that reclaims memory as it goes. Woo hints that HP intends to go further in later versions, perhaps all the way to a true real-time virtual machine. Typically in an embedded system, the physical limits combined with the need to hold costs down requires that the software run in as little memory as possible. An extra meg or so of RAM in each system adds up quickly when you're talking product volumes in the hundreds of thousands, like inexpensive printers.