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. Usetry-with-resources(AutoCloseable) orjava.lang.ref.Cleanerinstead. - Thread Management Methods:
Thread.stop(),Thread.suspend(), andThread.resume()have been permanently disabled and throwUnsupportedOperationException. - 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. |
Recommended Reading
SponsoredJava Core

