The JDK is the Java Development Kit, the full-featured SDK for Java. It has everything the JRE has, but also the compiler (javac) and tools (like javadoc and jdb). It is capable of creating and compiling programs.
The new Oracle Technology Network license agreement for Oracle Java SE is substantially different from previous Oracle JDK licenses. The new license allows certain uses, such as personal use and development use, at no cost, but other uses authorized under previous Oracle JDK licenses may no longer be available.
Sometimes, even if you don’t plan to do any Java development on a computer, you still need to install the JDK. For example, if you are deploying a web application with JSP, you are technically only running Java programs within the application server. Why would you need the JDK then? Because the application server will convert JSPs to Java servlets and needs to use the JDK to compile the servlets.
The full version string for this update release is 16.0.2+7 (where “+” means “build”). The version number is 16.0.2.
Full Java SE JDK 16.0.2 release notes can be found here.
This section describes some of the improvements in Java SE 16 and JDK 16. In some cases, descriptions provide links to additional detailed information about a problem or change. The APIs described here are those provided with the Oracle JDK. It includes a full implementation of the Java SE 16 platform and additional Java APIs to support development, debugging, and monitoring of Java applications. Another source of information about important improvements and new features in Java SE 16 and JDK 16 is the Java SE 16 Platform Specification (JSR 391), which documents specification changes made between Java SE 15 and Java SE 16. This document includes descriptions of new features and enhancements that are also specification changes. The descriptions also identify potential compatibility issues that you may encounter when migrating to JDK 16.
- JDK 16.0.2 contains time zone data from IANA 2021a. JEP
389: External Link API (Incubator)
- Enter an API that provides pure, statically typed Java access to native code. This API, along with the External Memory API (JEP 393), will greatly simplify the process of binding to an otherwise error-prone native library.
Strongly encapsulate JDK internals by default
- Strongly encapsulate all JDK internals by default, except critical internal APIs such as sun.misc.Unsafe. Allow end users to choose the relaxed strong encapsulation that has been the default since JDK 9.
- With this change, the default value of the launcher option -illegal access is now deny instead of allow. As a result, existing code that uses most of the JDK’s internal classes, methods, or fields will not run. Such code can be made to run on JDK 16 by specifying -illegal-access=permit. However, that option will be removed in a future release.
JEP 393: External Memory Access API (Third Incubator)
- Introduce an API to allow Java programs to securely and efficiently access external memory outside the Java heap.
JEP 390: Warnings for
value-based classes Users of
- value-based classes provided by standard libraries, including users of primitive wrapper classes, They should avoid relying on the identity of class instances. Programmers are strongly discouraged not to call container class constructors, which are now deprecated for removal. The new javac warnings discourage synchronization on value-based class instances. Run-time warnings about synchronization can also be triggered by using the -XX:DiagnoseSyncOnValueBasedClasses command-line option.
Complete the release notes here.