A Lightweight Java Virtual Machine for a Stack-Based Microprocessor
The large majority of modern JVM implementations are either pure software VMs on top of standard general purpose microprocessors (e.g., Insignia's Jeode or IBM's Jalape~ no VM) or Java-specic microprocessors with supportive software layers (e.g., Fujitsu's MB86799 or aJile's aJ-100). In this paper a somewhat different approach is pre sented: a lightweight software VM on top of a general purpose stack-based microprocessor. Said microprocessor is not a "hardware JVM", but its architecture is very similar to the JVM. Being truly a general purpose processor, it is not entirely dedicated to execute Java bytecode but can at the same time run C or FORTH applications.
This paper describes the implementation of a lightweight Java Virtual Machine for the Ignite family of stack-based microprocessors. To achieve an optimal Java performance this JVM uses a com bination of standard techniques, such as ahead-of-time (AOT) compilation, class hierarchy analysis (CHA), lazy class loading and binary rewriting, complemented by new optimizations like executable method access structures (XMAS) and lazy argument passing.
The unusual architecture of the target processor also often posed unusual problems that had to be solved.