Java Card is specifically designed for smart cards with very tight memory and processor constraints. Java Card does not support data types larger than 16 bits or multidimensional arrays. These specifications illustrate the diversity of embedded systems. The availability of system resources like memory and processing power varies dramatically. To accomplish this, several well-known techniques exist for executing Java bytecodes.
Interpreters are straightforward.
They simply simulate a Java machine at runtime by loading each Java opcode and performing the appropriate operation. To solve performance problems, JIT translators have been implemented with good success. JIT translators accept Java bytecodes and translate them to native code just prior to execution. Dynamic class loading requires significant program and data memory, which drives up size and cost, an outcome best avoided if possible. The vast majority of today's embedded systems do not load code dynamically and therefore do not require dynamic class loading.