Chapter 3. Deprecated and unsupported OpenJDK capabilities

The OpenJDK upstream project removed support for some technologies due to low community interest and better alternative solutions.

Ensure that you review the following deprecated and unsupported features before you install OpenJDK 17.

Applet API

OpenJDK 17 has deprecated the Applet API, because common web browsers do not support the Java plug-in for the Applet API. OpenJDK 17 also deprecates classes and API elements related to the Applet API.

For more information about the deprecated Applet API, see JEP 398: Deprecate the Applet API for Removal.

Concurrent mark-and-sweep (CMS) garbage collector (GC)

OpenJDK 17 has removed support for the CMS GC. CMS was deprecated from a previous release of OpenJDK.

For more information about removal of the CMS GC, see JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector.

Deprecate and disable biased locking

OpenJDK 17 deprecates biased locking and all of its command-line options.

For more information about deprecated biased locking feature, see JEP 374: Deprecate and Disable Biased Locking.

Graal JIT compiler and Java AOT compiler

OpenJDK 17 removed the Graal just-in-time (JIT) compiler, so the following modules were removed from OpenJDK 17:

  • jaotc
  • jdk.aot
  • jdk.internal.vm.compiler
  • jdk.internal.vm.compiler.management

You can continue to use the GrallVM for ahead-of-time (AOT) compilation tasks, and Mandrel for integrating GraalVM, OpenJDK and RHEL capabilities.

Additionally, OpenJDK 17 removes the Java ahead-of-time (AOT) compiler, also known as the jaotc tool.

You can continue to use the experimental Java-level JVM compiler interface (JVMCI) for JIT compilation tasks related to externally-built versions of the compiler.

For more information about removal of the AOT and JIT Compilers, see JEP 410: Remove the Experimental AOT and JIT Compiler.

PACK200 tools and APIs

OpenJDK 17 removed support for the PACK200 tools and the PACK200 APIs, which were both deprecated from a previous OpenJDK release.

The removed PACK200 tools are as follows:

  • pack200
  • unpack200

The removed PACK200 APIs are as follows:

  • java.util.jar.Pack200
  • java.util.jar.Pack200.Packer
  • java.util.jar.Pack200.Unpacker

These tools and APIs were removed because of improved technological download speeds and reduced browser support for Pack200 plug-ins.

For OpenJDK compatible applications, you can shrink application JARs by using either the jlink tool or the jpackage tool.

For more information about removal of PACK200 tools and APIs, see JEP 367: Remove the Pack200 Tools and API.

For more information about the jlink tool, see the OpenJDK 11 Using jlink to customize Java runtime environment guide.

Parallel Scavenge and Serial Old GC algorithms

OpenJDK 17 has deprecated the combination of the Parallel Scavenge and Serial Old garbage collector (GC) algorithms.

For more information about this GC algorithm combination, see JEP 366: Deprecate the ParallelScavenge + SerialOld GC Combination.

Nashorn JavaScript engine

OpenJDK 17 has removed support for the Nashorn JavaScript engine, its APIs, and the jjs tool.

For more information about removal of the Nashorn JavaScript engine, see JEP 372: Remove the Nashorn JavaScript Engine.

Remote Method Invocation (RMI)

OpenJDK 17 has removed the (RMI) activation mechanism and its java.rmi.activation API package. You can continue to use any other RMI features with OpenJDK 17.

For more information about removal of the RMI activation mechanism, see JEP 407: Remove RMI Activation.

Security Manager

OpenJDK 17 has deprecated the Security Manager feature, which includes its classes and its methods, due to low community interest.

For more information about deprecating security manager, see JEP 411: Deprecate the Security Manager for Removal.

Solaris and SPARC Ports

OpenJDK 17 has removed the source code and build support for the Solaris/SPARC, Solaris/x64, and Linux/SPARC ports.

For more information about removal of Solaris and SPARC Ports, see JEP 381: Remove the Solaris and SPARC Ports.

Value-based class warnings

OpenJDK 17 designates the primitive wrapper classes as value-based and deprecates their constructors. This creates new deprecation warnings that prompt you about improper attempts to synchronize on value-based classes in the Java Platform.

For more information about value-based class warnings, see JEP 390: Warnings for Value-Based Classes.