payara-header-2

Java SE vs Java EE vs Java ME: Choosing the Right Java Edition

Smart Summary

Java SE, Jakarta EE, and Java ME are three distinct platforms built for different application categories, and this article breaks down when to choose each one, with a comparison table covering best-fit use cases, key APIs, and runtimes. It also clears up a common point of confusion (Spring runs on Java SE, not Jakarta EE) and outlines how Azul Core, Azul Payara Server, Azul Prime, and Azul Intelligence Cloud support workloads across all three editions. Useful for developers and architects deciding which Java edition fits a given project.

The three editions share the same programming language and many core APIs. Java SE is the foundation. Java EE (Jakarta EE) extends SE with enterprise APIs for large-scale applications. Java ME is a constrained subset for resource-limited devices. In practice, most enterprise Java development today uses Java SE directly, often with frameworks like Spring Boot or Quarkus, or uses Jakarta EE on application servers. Java ME is primarily in embedded systems, IoT devices, and smart cards.

How to Choose the Right Java Edition

Edition Best for Key APIs Runtime
Java SE Standalone apps, microservices, libraries, server-side with Spring Boot or Quarkus java.lang, java.util, java.io, java.net, java.sql, java.util.concurrent JVM (Azul Core)
Jakarta EE (formerly Java EE) Large-scale enterprise apps needing standardized APIs and portability across certified servers Servlet, JPA, JAX-RS, CDI, EJB, JMS, Jakarta Security Application server (Payara, Open Liberty, WildFly, GlassFish)
Java ME Embedded systems, IoT, smart cards, constrained devices CLDC, CDC, MIDP, JavaCard Embedded JVM

Choose Java SE for the broadest range of development. Any standalone application, command-line tool, library, desktop application, or server-side application built with Spring Boot or Quarkus runs on Java SE. If you are learning Java, building a microservice, writing a data pipeline, or creating a library, Java SE is the platform.

Choose Jakarta EE when you need a standardized set of enterprise APIs and want portability across certified application servers. Jakarta EE makes sense when your organization has existing investment in application servers (Payara, Open Liberty, WildFly), needs distributed transactions or managed messaging, or requires vendor support for the complete enterprise stack. Jakarta EE 11 (the current specification, certified on Payara Server 7) added Jakarta Concurrency 3.1 (container-managed virtual threads) and Jakarta Data 1.0 (repository with vector storage), both of which anchor Java-native AI workloads.

Choose Java ME for embedded systems, IoT devices, smart cards, and constrained environments where the full Java SE runtime is too large. For modern IoT, many teams now use Java SE on lightweight Linux (Raspberry Pi) rather than Java ME, since hardware constraints have relaxed. Java ME remains relevant for microcontrollers, secure elements (JavaCard), and industrial controllers.

A common confusion: Spring is a Java SE framework, not a Java EE technology. Spring runs on Java SE, not on a Jakarta EE application server. Most modern enterprise Java development uses either Spring Boot on Java SE or Jakarta EE on an application server. The choice between them is covered in Java EE vs Spring.

Versioning

Java SE version numbers (Java 8, 11, 17, 21, 25) track the Java SE specification and OpenJDK releases. Jakarta EE has its own versioning (Jakarta EE 9, 10, 11) independent of Java SE, though each Jakarta EE release specifies a minimum Java SE version. Java ME follows its own specification track tied to device configurations.

How Azul Can Help

For Java SE and Jakarta EE workloads, Azul Core (Azul’s builds of OpenJDK, including Azul Zulu) delivers certified OpenJDK builds across all LTS versions (Java 8, 11, 17, 21, 25) with commercial support, security patches, and long-term maintenance. Teams standardizing on Azul Core get one supported Java distribution across their entire fleet, whether they run Spring Boot microservices, Jakarta EE on application servers, or both.

Azul Payara Server is a Jakarta EE 11 certified application server for enterprises migrating off Oracle WebLogic, IBM WebSphere, or Red Hat JBoss EAP. The existing application deploys unchanged to the namespace-matched Payara version, with transparent per-vCore pricing and monthly security patches from a registered CVE Numbering Authority. One vendor for the JDK and the application server.

Azul Prime optimizes Java SE and Jakarta EE performance through C4 garbage collection and ReadyNow technology, addressing GC pause latency and slow startup.

Azul Intelligence Cloud provides runtime visibility into which library versions are actively running in production, critical for security compliance across the different editions and their dependency ecosystems.