From time to time I have wondered before why current mobile phones are able to execute Java ME applications so well and with good performance. To me this was a bit surprising to me since Java ME programs are not compiled for a specific hardware platform but instead into a machine independent ‘byte code’. This enables Java applications to run on a wide variety of Java enabled handsets. To execute machine independent byte code a Java Virtual Machine (JVM) is required. On the PC for example, JVM’s are implemented in software. On mobile devices, however, I found out today that ARM for example offers a CPU operating mode referred to as Jazelle which executes Java byte code in hardware. This way Java applications can be executed much faster as if a software JVM interprets the byte code. Pretty slick! For details see the Wikipedia entry on ARM processor and ARM’s description of Jazelle.
P.S.: A long time ago Sun, the inventor of Java, tried hard to push JAVA CPU’s for desktop machines but never really succeeded. Now, a decade later, there are indeed Java CPU’s, just for a slightly different purpose. Looks like there were a bit ahead of the time.