To support the broad range of products that fit within the scope of J2ME, Sun introduced the Configuration.
A Configuration defines a Java platform for a broad range of devices. A Configuration is closely tied to a Java Virtual Machine (JVM). In fact, a Configuration defines the Java language features and the core Java libraries of the JVM for that particular Configuration.
The dividing line as to what a Configuration applies is for the most part based on the memory, display, network connectivity (or limitations of) and processing power available on a device.
The Sun J2ME FAQ states the following: "The J2ME technology has two design centersthings that you hold in your hand and things you plug into a wall." This may be a good general definition, but that's exactly what it is, general. Don't let this be your sole guide in deciding which Configuration applies.
Following are typical characteristics of devices within the two currently defined Configurations:
Connected Device Configuration (CDC)
512 kilobytes (minimum) memory for running Java
256 kilobytes (minimum) for runtime memory allocation
Network connectivity, possibly persistent and high bandwidth
Connected, Limited Device Configuration (CLDC)
128 kilobytes memory for running Java
32 kilobytes memory for runtime memory allocation
Restricted user interface
Low power, typically battery powered
Network connectivity, typically wireless, with low bandwidth and intermittent access
Although this division seems pretty clear, this won't always be the case. Technology is continually advancing. Remember your first computer? What was "state-of-the-art" in 1985 (when I purchased my first personal computer) pales in comparison to what is available today.
The point is, as technology offers us more processing power, with increased memory and screen capabilities, the overlap between these categories will become larger. This is a nice segue to our next discussion, Profiles.