CLDC was created by the Java Community Process, which has standardized this "portable, minimum-footprint Java building block for small, resource-constrained devices," as defined on Sun Microsystems' Web site.
The J2ME CLDC configuration provides for a virtual machine and set of core libraries to be used within an industry-defined profile. As mentioned in Section 2, a profile defines the applications for particular devices by supplying domain-specific classes on top of the base J2ME configuration. The K virtual machine (KVM), CLDC's reference implementation of a virtual machine, and its KJava profile run on top of CLDC.
CLDC outlines the most basic set of libraries and Java virtual machine features required for each implementation of J2ME on highly constrained devices. CLDC targets devices with slow network connections, limited power (often battery operated), 128 KB or more of non-volatile memory, and 32 KB or more of volatile memory. Volatile memory is non-persistent and has no write protection, meaning if the device is turned off, the contents of volatile memory are lost. With non-volatile memory, contents are persistent and write protected. CLDC devices use non-volatile memory to store the run-time libraries and KVM, or another virtual machine created for a particular device. Volatile memory is used for allocating run-time memory.