JVM Comparison: Performance in 2023

RuntimeLicenseNotable Features
OpenJDKGPL + Classpath ExceptionReference implementation; broad ecosystem support.
Oracle JDKOracle No-Fee Terms for internal useCommercial support, quarterly PSU patches, Flight Recorder/Mission Control.
Azul Platform Prime (Zulu/Prime)CommercialC4 pauseless GC, ReadyNow warmup profiles, tuned for low-latency workloads.
GraalVM Community/EnterpriseOSS + CommercialHigh-performance JIT, polyglot support, Native Image AOT compilation.
IBM Semeru (Eclipse OpenJ9)EPLLow footprint JVM with balanced GC and shared classes cache.
SAP SapMachineApache 2.0Hardens OpenJDK with enterprise security patches and SAP tooling integration.

Legacy runtimes such as JRockit and IKVM are no longer maintained; avoid them for new deployments.

Selecting a Runtime

  1. Support & Licensing: Determine whether you need vendor support (Oracle, Azul, IBM, Red Hat) or if community builds meet policy requirements.
  2. Workload Characteristics:
    • Low-latency trading → look at Azul Prime or tuned OpenJDK builds with ZGC/Shenandoah.
    • Memory-constrained containers → evaluate Eclipse OpenJ9 for smaller footprints.
    • Polyglot or ahead-of-time needs → consider GraalVM for Native Image.
  3. Operational Tooling: Ensure observability pipelines (JFR, JMX, eBPF agents) are compatible with your chosen runtime.
  4. Benchmarking: Use JMH or production-like load tests; marketing benchmarks rarely match real workloads.

Upgrade & Maintenance Tips

  • Stay on supported LTS lines (Java 17 or 21 as of 2024). Apply security patches on the quarterly cadence.
  • Validate GC configuration during runtime upgrades; defaults change (e.g., G1 GC vs. ZGC availability).
  • Monitor start-up warmup times if you rely on GraalVM Native Image; ahead-of-time builds trade startup for peak throughput.

References