However, to run Java in an embedded system in this manner may not be possible. A desktop processor is just too expensive to run in an embedded application, in terms of the raw cost of the components, the memory required, and the power consumed. Running a software JVM on a processor more typical of embedded systems means that the clock rate of the processor will be lower, and therefore the performance of an interpreter will be lower. Running at a lower supply voltage concomitant with a lower clock speed could also reduce the power even further. In the case of MOON, for example, the processor is implemented in 27,000 gates, which is very small by the standards of current ASIC technology.
Fewer gates means lower power, which means further savings in system cost.
For very small embedded systems, a traditional JVM which dynamically loads applications may still require too much memory. In these cases, it is possible to provide a statically linked application image for a Java processor, which can be placed in a small ROM, which may only need to be a few tens of kilobytes in size. In some cases it may be advantageous to run a Java processor alongside an existing processor. For example there are many systems that contain a great deal of legacy code, which it would be impractical to rewrite in one pass. However, Java is now becoming a requirement in many of these systems, and it is necessary to look at how a Java execution facility might be provided.