What is J2ME? Cut away the hype and the excess fat and you are left with yet
another (set of) Java APIs.
A D V E R T I S E M E N T
Since these APIs cannot run on a traditional Java
Virtual Machine (JVM), due to the limited size of mobile devices in regards to
memory and resource availability, J2ME defines a limited version of the JVM as
well. In a nutshell:
J2ME combines a resource constrained JVM and a set of Java APIs for
developing applications for mobile devices.
Do you, as a developer, have to install this JVM and the APIs on mobile
devices? No. Device manufacturers install and prepackage their devices with this
JVM (and associated APIs). As a developer, you only need to develop applications
targeting these devices and install them. Easier said than done!
J2ME can be divided into three parts, as shown in Figure 1: a configuration,
a profile, and optional packages. A configuration contains the JVM (not the
traditional JVM, but the cut-down version) and some class libraries; a profile
builds on top of these base class libraries by providing a useful set of APIs;
and optional packages, are well, an optional set of APIs that you may or may not
use when creating your applications. Optional packages are traditionally not
packaged by the device manufacturers, and you have to package and distribute
them with your application. The configuration and profile are supplied by the
device manufacturers and they embedded them in the devices.
Figure 1. The J2ME stack
The most popular profile and configuration that Sun provides are the Mobile
Information Device Profile (MIDP) and Connected Limited Device Configuration (CLDC),
respectively. As the name suggests, CLDC is for devices with limited
configurations; for example, devices that have only 128 to 512KB of memory
available for Java applications. Consequently, the JVM that it provides is very
limited and supports only a small number of traditional Java classes. (This
limited JVM is actually called the KVM.) Its counterpart, the Connected
Device Configuration (CDC) is for devices with at least 2MB of memory available
and supports a more feature-rich JVM (but still not a standard JVM).
The MID profile complements the CLDC configuration very well because it
minimizes both the memory and power required for limited devices. It provides
the basic API that is used for creating application for these devices. For
example, it provides the
javax.microedition.lcdui package that
allows us to create the GUI elements that can be shown on a (limited) device
running the MID profile on top of a CLDC configuration. Note that MIDP cannot be
used with CDC devices. CDC devices get their own set of profiles, like the
Foundation and Personal profiles. However, I will not cover these profiles or
the CDC here, and will concentrate on using MIDP and CLDC only.
The latest versions of MIDP and CLDC are 2.0 and 1.1, respectively. Not many
devices currently support these versions, but the list is growing rapidly.