The heart of the J2ME platform is the K Virtual Machine (KVM). The KVM, written in C, is a tiny (approximately 40KB) Java virtual machine designed to run a subset of "standard" Java on small, mobile devices. The KVM, when combined with a "configuration" and a specified set of core libraries, makes up a device profile. From the Sun documentation, a profile can be defined as follows:
a specification that details the Java technology APIs, built on top of and utilizing the underlying Configuration, necessary to provide a complete runtime environment for a specific kind of device. Profiles specify both APIs and the Configuration (if offered). A profile must be complete in the sense that an application written to the specification can execute in the specified Java technology environment without the addition of other Java classes (as opposed to Optional Packages). Profiles can be thought of as selecting classes from APIs to form a complete environment. Profiles are designed and integrated to meet the needs of specific industry segments.
Profiles are defined through the Sun Community Process Program.