The ARM architecture is typically used in constrained devices such as smartphones and low end netbooks. Typically a constrained device has
* Single, not multiple core
* Relatively fast core speed (800MHz)
* Small primary cache (32K I+D)
* Small secondary cache
* Slow memory system (typically 300nS)
* Small memory system (typically 512M)

This means that the system is almost completely constrained by the memory system. A single cache miss can cost up to 270 cycles.

This presents particular challenges for the VM writer. A traditional JIT solution may not offer the best performance because of cache trashing. For larger applications the interpreter may actually offer better performance than a JIT.

Over the past year I have been working on a project to improve the Java performance on these devices. I have implemented this by writing an optimised ARM Interpreter in hand crafted ARM assembler and coupling this with a Thumb2 JIT which interacts quickly and seamlessly with the interpreter.