Oracle heeft vorige maand versie 14 van Java Standard Edition uitgebracht. Oracle brengt sinds versie 11.x alleen nog de Java SE Development Kit (JDK) uit, in zowel de Oracle JDK- als de OpenJDK-smaak, waarbij de laatste onder de gpl-licentie wordt aangeboden. Er worden geen Java Runtime Environment (JRE) en Server Java Runtime Environment (Server JRE) meer uitgebracht. Wel is het mogelijk om met
jlink een kleinere runtime samen te stellen. De releasenotes van deze versie ziet er als volgt uit:
These notes describe important changes, enhancements, removed APIs and features, deprecated APIs and features, and other information about JDK 14 and Java SE 14. In some cases, the descriptions provide links to additional detailed information about an issue or a change. This page does not duplicate the descriptions provided by the Java SE 14 (JSR 389) Platform Specification, which provides informative background for all specification changes and might also include the identification of removed or deprecated APIs and features not described here.
New Features and Enhancements
Removed Features and Options
- Accounting Currency Format Support
- JEP 359 Records (Preview)
- Clarify the Specification of ReadableByteChannel.read() and Related Methods
- JEP 365 ZGC on Windows
- JEP 364 ZGC on macOS
- Parallel GC Improvements
- JEP 345 NUMA-Aware Memory Allocation for G1
- Weak Named Curves in TLS, CertPath, and Signed JAR Disabled by Default
- Apache Santuario Library Updated to Version 2.1.4
- Allow Discoverable javac Plugins to be Invoked by Default
- New Method to SAX ContentHandler for Handling XML Declaration
Deprecated Features and Options
- Removal of sun.nio.cs.map System Property
- JEP 363 Remove the Concurrent Mark and Sweep (CMS) Garbage Collector
- Removed Deprecated java.security.acl APIs
- Removal of the Default keytool -keyalg Value
- JEP 367 Remove the Pack200 Tools and API
- Thread Suspend/Resume Are Deprecated for Removal
- JEP 366 Deprecate the ParallelScavenge + SerialOld GC Combination
- Deprecated the Legacy Elliptic Curves for Removal
- Deprecated the OracleUcrypto JCE Provider for Removal
Differences Between Oracle JDK and Oracle's OpenJDK
- Text Visibility Issues in macOS Dark Mode
- Better Serial Filter Handling
- Thread Interrupt State Is Always Available
- Thread.countStackFrames Changed to Unconditionally Throw UnsupportedOperationException
- MethodTypefromMethodDescriptorString Requires "getClassLoader" Permission
- MethodHandlesprivateLookupIn Requires PRIVATE Lookup Mode
- Lookupin Throws IllegalArgumentException If requestedLookupClass Is a Primitive Type or an Array Class
- MethodHandlesprivateLookupIn Might Not Produce a Lookup With Full Privilege Access
- DatagramSocket.send and MulticastSocket.send Throw IllegalArgumentException When Socket Is Not Connected and Packet Doesn't Contain Address
- MulticastSocket getOption(IP_MULTICAST_IF) Returns null when outgoing interface not set
- Behavior of MulticastSocket getOption/setOption for IP_MULTICAST_LOOP Conforms With the StandardSocketOptions.IP_MULTICAST_LOOP Specification
- InetSocketAddress.toString Format Changes for IPv6 Literals and Unresolved Addresses
- DatagramChannel.disconnect Might Leave the Channel's Socket in an Unspecified State
- Improve Registry Support
- Plural Support in CompactNumberFormat
- Upgraded CLDR to v36
- ExecutableElement.getReceiverType Changed to Return NOTYPE Rather Than null
- DnsClient TCP Socket Timeout
- OperatingSystemMXBean Methods Inside a Container Return Container Specific Data
- Turned Off AOT by Default and Changed Related Flags to Experimental
- Added -XX+AdjustStackSizeForTLS Flag
- Detailed Message in NullPointerExceptions
- CDS Behavior Change With Non-existent Files During Archive Creation
- Exact Match Required for Trusted TLS Server Certificate
- New Checks on Trust Anchor Certificates
- Added LuxTrust Global Root 2 Certificate
- Added 4 Amazon Root CA Certificates
- Protected javax.crypto.Cipher Constructor Throws IAE for Non-null Invalid Arguments
- SunJCE Provider Throws NoSuchAlgorithmException for AES/GCM/PKCS5Padding
- Removed SSLv2Hello and SSLv3 From Default Enabled TLS Protocols
- DelegationPermission Allows Creating an Instance That Thows NPE on equals Call
- toString() on Annotation Objects is Consistent Between Core Reflection and javac
- Default ErrorListener No Longer Reports Warnings and Errors to the Console
Although we have stated the goal to have OpenJDK and Oracle JDK binaries be as close to each other as possible there remains, at least for JDK 13, several differences between the two options. The current differences are:
- Oracle JDK offers "installers" (msi, rpm, deb, etc.) which not only place the JDK binaries in your system but also contain update rules and in some cases handle some common configurations like set common environmental variables (such as, JAVA_HOME in Windows) and establish file associations (such as, use java to launch .jar files). OpenJDK is offered only as compressed archive (tar.gz or .zip).
- javac —release for release values 9 and 10 behave differently. Oracle JDK binaries include APIs that were not added to OpenJDK binaries such as javafx, resource management, and (pre JDK 11 changes) JFR APIs.
- Usage Logging is only available in Oracle JDK.
- Oracle JDK requires that third-party cryptographic providers be signed with a Java Cryptography Extension (JCE) Code Signing Certificate. OpenJDK continues allowing the use of unsigned third-party crypto providers.
- The output of java -version is different. Oracle JDK returns java and includes the Oracle-specific identifier. OpenJDK returns OpenJDK and does not include the Oracle-specific identifier.
- Oracle JDK is released under the OTN License. OpenJDK is released under GPLv2wCP. License files included with each will therefore be different.
- Oracle JDK distributes FreeType under the FreeType license and OpenJDK does so under GPLv2. The contents of \legal\java.desktop\freetype.md is therefore different.
- Oracle JDK has Java cup and steam icons and OpenJDK has Duke icons.
- Oracle JDK source code includes "ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms." Source code distributed with OpenJDK refers to the GPL license terms instead.