Desde o início, com o lançamento do Java Development Kit (JDK), Java evoluiu bastante. A pedidos de desenvolvedores, interfaces e bibliotecas foram incluídas. Novas funcionalidades foram reunidas e uma nova plataforma, chamada J2SE (Java 2 Platform, Standard Edition), foi lançada. Com a crescente demanda pela programação de software do lado do servidor (server-side programming), surgiu J2EE (Java 2 Platform, Enterprise Edition), conjunto de classes que provê as funcionalidades de J2SE e adiciona outras.
Novas perspectivas surgiram com a evolução de dispositivos pequenos, de baixo processamento, como celulares e PDAs. Esse fato indicaria que a próxima evolução viria em breve: J2ME (Java 2 Platform, Micro Edition). Porém, em vez de expandir o conjunto de recursos dos demais toolkits, J2ME reune apenas um pequeno conjunto de funcionalidades, devido a limitações de memória e processamento.
A arquitetura J2ME é composta pelos seguintes componentes:
Tais componentes podem ser escolhidos e combinados para contruir um ambiente completo e atender aos requisitos de uma variedade de dispositivos disponíveis no mercado. Cada combinação é otimizada para os requisitivos de memória, poder de processamento e funcionalidades de I/O.
Inclui uma máquina virtual, uma interface para as funcionalidades nativas do dispositivo e uma biblioteca de classes bem limitada. Provê apenas funcionalidades básicas para um determinado conjunto de dispositivos que possuem características similares, como conectividade via rede. Atualmente, há dois de configuração:
Conjunto de classes que implementam características de um dispositivo particular ou de uma classe de dispositivos, adicionando funcionalides não abrangidas pela configuração. Juntamente com a configuração, provê um ambiente completo para a execução de aplicações em um determinado dispositivo. Como a tecnologia para o desenvolvimento de dispositivos nesse segmento evolui constantemente, novos perfis são definidos. Atualmente, existem sete perfis, seis para CDC e um para CLDC:
Conjunto de classes com recursos que não são
oferecidos por configurações e perfis. Como são modulares,
desenvolvedores podem escolher apenas os pacotes que atendem aos seus requisitos.
Segue abaixo uma lista com alguns pacotes opcionais:
Somadas às classes do perfil e da configuração, fabricantes de celular podem adicionar outras classes. Entretanto, o uso de tais classes compromete a portabilidade.