Java - Deprecated

Java maintains backwards compatibility, but legacy APIs, obsolete runtime modules, and outdated patterns are progressively deprecated and removed.

Officially Deprecated / Removed APIs

Deprecated for Removal / Removed

  • Security Manager (JEP 411): Deprecated for removal in Java 17. Blocked or issues warnings in Java 21+. Modern security relies on OS containers, hypervisors, and process isolation rather than Java sandbox security managers.
  • Finalization (Object.finalize(), JEP 421): Deprecated for removal in Java 18. Use try-with-resources (AutoCloseable) or java.lang.ref.Cleaner instead.
  • Thread Management Methods: Thread.stop(), Thread.suspend(), and Thread.resume() have been permanently disabled and throw UnsupportedOperationException.
  • Applet API & Java Web Start: Deprecated in Java 9, removed completely from JDK 11.
  • Nashorn JavaScript Engine: Removed in Java 15 (JEP 372).
  • JavaFX: Removed from the core JDK in Java 11; distributed independently as OpenJFX.
  • RMI Activation: Deprecated for removal in Java 15 and removed in Java 17.

Java EE & CORBA Modules Removed from Java SE

Removed in Java 11 (JEP 320):

  • java.xml.ws (JAX-WS)
  • java.xml.bind (JAXB) — modern projects use external Maven/Gradle dependencies (e.g. jakarta.xml.bind:jakarta.xml.bind-api).
  • java.corba (CORBA)
  • java.transaction (JTA)

Garbage Collectors Removed

  • Concurrent Mark Sweep (CMS): Deprecated in Java 9, removed in Java 14 (JEP 363). Replace with G1GC (default) or ZGC (-XX:+UseZGC -XX:+ZGenerational).

Classes Not Deprecated but Have Better Modern Alternatives

Legacy Class / Pattern Modern Java Replacement Rationale
java.util.Date, Calendar java.time.Instant, LocalDate, ZonedDateTime Date/Calendar are mutable, not thread-safe, and zero-indexed for months. java.time is immutable and ISO-8601 compliant.
java.util.Vector java.util.ArrayList Vector synchronizes every method, creating massive thread contention.
java.util.Stack java.util.ArrayDeque Stack inherits from Vector; ArrayDeque is faster and not synchronized.
java.util.Hashtable java.util.concurrent.ConcurrentHashMap Hashtable uses coarse whole-map synchronization; ConcurrentHashMap uses fine-grained lock-striping.
Raw Threads (new Thread()) Executors.newVirtualThreadPerTaskExecutor() Virtual threads (Java 21) or thread pools avoid heavy OS thread allocation overhead.
Anonymous Classes for Single Methods Lambda expressions (x -> ...) / Method references Lambdas reduce boilerplate and compile to invokedynamic rather than generating .class files.
Plain POJO data carriers record classes (Java 14+) Auto-generates immutable constructors, getters, equals(), hashCode(), and toString().
Complex getter chains with null checks Optional<T> Eliminates NullPointerException risks on method return values.