What J2ME does is provide a controlled process by which subsets of
Java can be developed for smaller devices. At the most basic level, J2ME defines configurations, which defines minimum memory and capability requirements expected of a device along with what kind of features the Java VM has to offer and a minimal set of Java core classes. Right now there are two configurations:
-- The Connected Device Configuration (CDC) is for heftier devices and it uses the "classic" Java VM with all the same capabilities. It also includes a fairly large subset of the core Java APIs.
-- The Connected Limited Device Configuration (CLDC) is for smaller devices. It uses a new VM called the KVM that does not support certain features (floating point being the biggie) and has a much smaller subset of core Java APIs.
Usually, though, when people talk about J2ME they're referring to the CLDC/KVM.
Eric