The full version string for this update release is 1.8.0_20-b26 (where "b" means "build"). The version number is 8u20.
This update release contains several enhancements and changes including the following:
JDK 8u20 contains IANA time zone data version 2014c. For more information, refer to Timezone Data Versions in the JRE Software.
The security baselines for the Java Runtime Environment (JRE) at the time of the release of JDK 8u20 are specified in the following table:
JRE Family Version | JRE Security Baseline (Full Version String) |
---|---|
8 | 1.8.0_11 |
7 | 1.7.0_65 |
6 | 1.6.0_81 |
5.0 | 1.5.0_71 |
For more information about security baselines, see Deploying Java Applets With Family JRE Versions in Java Plug-in for Internet Explorer.
The JRE expires whenever a new release with security vulnerability fixes becomes available. Critical patch updates, which contain security vulnerability fixes, are announced one year in advance on Critical Patch Updates, Security Alerts and Third Party Bulletin. This JRE (version 8u20) will expire with the release of the next critical patch update scheduled for October 14, 2014.
For systems unable to reach the Oracle Servers, a secondary mechanism expires this JRE (version 8u20) on November 14, 2014. After either condition is met (new release becoming available or expiration date reached), the JRE will provide additional warnings and reminders to users to update to the newer version. For more information, see JRE Expiration Date.
This JDK release includes Java Mission Control (JMC) version 5.4. For more information, see JMC 5.4 Release Notes.
Advanced Management Console (AMC) 1.0 is a commercial product available for Java users who license Java SE Advanced or Java SE Suite. AMC is downloaded separately from the JDK and is available to customers from My Oracle Support (MOS) or can be downloaded from OTN for trial purposes.
A primary benefit of Advanced Management Console is the ability to learn which applications are being run in the enterprise as well as the JREs that are being used. Additional information, such as the location of the application, vendor, permission level, number of JAR files and extensions, and number of times the application has been run is also provided. Information from Java Usage Tracker is collected by the AMC Collector, stored in the AMC database and displayed in the AMC UI.
Deployment rules can be created directly from this information and packaged into rule sets. The guided rule creation and packaging support greatly simplifies developing Deployment Rule Sets. The AMC UI can also be used to determine which rules and rule sets an application matches, helping system administrators understand the impact of installing a particular rule set prior to physically testing it in user environments.
For a summary of this feature, see Advanced Management Console documentation.
core-libs/java.lang:reflect
The javadoc for the Class.getMethod
and Class.getMethods
refer to the definition of inheritance in the Java Language Specification. Java SE 8 changed these rules in order to support default methods and reduce the number of redundant methods inherited from superinterfaces (see JLS 8, 8.4.8).
Class.getMethod
and Class.getMethods
were not updated with the 8 release to match the new inheritance definition (both may return non-inherited superinterface methods). Typically, the distinction is of no consequence; and for compatibility, it is preferred that the identity and number of returned methods match Java SE 7 as closely as possible. However, when the overriding method is a default method, it is important to filter out other overridden methods. As of 8u20, the implementation has been changed to perform this filtering step when the overrider is a default method.
See JDK-8029674.
security-libs/org.ietf.jgss:krb5
An interoperability issue is found between Java and the native Kerberos implementation on BSD (including macOS) on the kdc_timeout
setting in krb5.conf
, where Java interpreted it as milliseconds and BSD as seconds when no unit is specified. This code change adds support for the "s
" (second) unit. Therefore if the timeout is 5 seconds, Java accepts both "5000
" and "5s
". Customers concerned about interoperability between Java and BSD should use "5s
".
See JDK-8036779.
The flags MinHeapFreeRatio
and MaxHeapFreeRatio
have been made manageable. This means they can be changed at runtime using the management API in Java. Support for these flags have also been added to the ParallelGC
as part of the adaptive size policy.
A new Microsoft Windows Installer (MSI) Enterprise JRE Installer which enables user to install the JRE across the enterprise, is available. See Downloading the Installer section in JRE Installation for Microsoft Windows for more information. The MSI Enterprise JRE Installer is only available as part of Java SE Advanced or Java SE Suite. For information about these commercial products, see Java SE Advanced and Java SE Suite.
The following new configuration parameters are added to support commercial features, for use by Java SE Advanced or Java SE Suite licensees only.
USAGETRACKER_CFG=
DEPLOYMENT_RULE_SET=
See Installing With a Configuration File for more information about these and other installer parameters.
The Java Uninstall Tool is integrated with the installer to provide an option to remove older versions of Java from the system. The change is applicable to 32 bit and 64 bit Windows platforms. See Uninstalling the JRE.
Starting with JDK 8u20 release, the JRE will be installed in a version specific directory. For example:
C:\Program Files\Java\jre1.8.0_20
The version specific directory naming is intentional and it does not indicate that the JRE install is static.
As with the earlier releases, static JRE install is performed only if STATIC=1
option is passed (via command line or config file) by the user.
Existing Java applications that depend on the physical location of the JRE should be updated to reflect the new installation directory format.
The Update
tab in the Java Control Panel now enables the users to automatically update 64-bit JREs (in addition to 32-bit versions) that are installed on their system.
The Medium
security level has been removed. Now only High
and Very High
levels are available.
Applets that do not conform with the latest security practices can still be authorized to run by including the sites that host them to the Exception Site List.
The exception site list provides users with the option of allowing the same applets that would have been allowed by selecting the Medium
option but on a site-by-site basis therefore minimizing the risk of the using more permissive settings.
The javac
compiler has been updated to implement definite assignment analysis for blank final field access using "this". See JDK 8 Compatibility Guide for more details.
The minimum version of Java required for Java Plugin and Java Webstart is now Java 5. Applets that do not run in Java 5 or later must be ported to a later version of Java to continue to function. Applets written for earlier versions but able to run in at least Java 5 will continue to work.
UsageTracker
output formattingUsageTracker
output formatting has been changed to use quoting, to avoid confusion in the log. This may require changes to the way such information is read. The feature can be configured to behave as in previous versions, although the new format is recommended.
See Java Usage Tracker documentation.
"-B"
option has been added to the javapackager deploy command to enable you to pass arguments to the bundlers that are used to create self-contained applications. See javapackager
(Windows)/(Unix) documentation for information<fx:bundleArgument>
helper parameter argument has been added to JavaFX Ant Task Reference. It enables you to specify an argument (in the <fx:deploy> element) for the bundler that is used to create self-contained applications.javax.smartcardio.Card.disconnect(boolean reset)
method behaviorPrior to the JDK 8u20 and JDK 7u72 releases, the javax.smartcardio.Card.disconnect(boolean reset)
method had inverted logic for the 'reset'
boolean value passed to it. The card was reset upon a disconnect if false was passed to it and vice versa. Starting with JDK 7u72 and JDK 8u20, the correct behavior as per API documentation has been implemented.
In order to provide backwards compatibility to users who rely on the old behavior, a new system property has been introduced. The following command-line option can be used to enforce the old broken behavior:
-Dsun.security.smartcardio.invertCardReset=true
This property is set by default for 7u72 and later JDK 7 update releases. By default, no behavioral change will be noticed in this area for JDK 7 update releases.
Also the following command-line option can be used to enforce the new correct behavior:
-Dsun.security.smartcardio.invertCardReset=false
This is default for 8u20 and later JDK 8 update releases. In future Java releases, the property will be ignored/disabled and default disconnect method behavior will be as specified by API.
Starting with JDK 8u20, the RPM package name has been changed to include the Java product version.
For example, whereas the rpm name used to be returned simply as "jre", it is now returned as follows:
rpm -qp --qf "%{name}\n" ./jre-8u20-linux-x64.rpm
jre1.8.0_20
New Garbage Collection Tuning Guide added to JDK 8 documentation
The Java HotSpot Virtual Machine Garbage Collection Tuning Guide has been added to the Java SE 8 Developer Guides. This guide describes the garbage collectors included with the Java HotSpot VM and helps you decide which garbage collector can best optimize the performance of your application, especially if it handles large amounts of data (multiple gigabytes), has many threads, and has high transaction rates.
New Deployment Guide
The Java SE Deployment Guide combines information for Java SE and JavaFX deployment into a single guide. This guide provides information about the Java packaging tools, creating self-contained applications, and deploying Java and JavaFX applications that are embedded in a web page or launched from a browser.
Updated Troubleshooting Guide
The Java SE Troubleshooting Guide combines and replaces the Desktop Technologies Troubleshooting Guide and the HotSpot Virtual Machine Troubleshooting Guide, to provide a single location for diagnosing and solving problems that may occur with Java applications created on the Java SE 8 Platform and on Java HotSpot VM. The document introduces the new and improved troubleshooting tools and techniques like Java Mission Control, Java Flight Recordings, and JCMD.
Installation Guide has been updated with changes to Installing With a Configuration File.
Options related to string deduplication have been added to the java command tool page. String deduplication reduces the memory footprint of String objects on the Java heap by taking advantage of the fact that many String objects are identical. Instead of each String object pointing to its own character array, identical String objects can point to and share the same character array. See the option -XX:+UseStringDeduplication
for more information.
For a list of bug fixes included in this release, see JDK 8u20 Bug Fixes page.
The following are some of the notable bug fixes in this release:
Area: tools/javac
Synopsis: Implement eager resolution of return types
The compiler specification, see JLS8 18.5.2, modified the treatment of nested generic method invocations for which the return type is an inference variable. The compiler has been adapted to implement the new logic. This is important to minimize incompatibility with the javac 7 inference algorithm. Three cases are considered:
The compiler update implies an eager resolution for generic method invocations, provided that the return type is an inference variable.
See 8030741.
Area: security-libs/org.ietf.jgss:krb5
Synopsis: sun.security.krb5.KdcComm
interprets kdc_timeout
as msec instead of sec
An interop issue is found between Java and native Kerberos implementation on BSD (including Apple OS X) regarding the kdc_timeout
setting in krb5.conf
, which Java interprets as milliseconds and BSD as seconds (when no unit is specified). This release adds support for the "s" (seconds) unit. Therefore if the timeout is 5 seconds, Java accepts both "5000" and "5s". Customers concerned about the interop between Java and BSD should use the later format.
See 8044399.
Area: other-libs/corba
Synopsis: org.omg.CORBA.ORBSingletonClass
loading no longer uses context class loader
The system property org.omg.CORBA.ORBSingletonClass
is used to configure the system-wide/singleton ORB. The handling of this system property has changed in 7u55 release to require that the system wide/singleton ORB be visible to the system class loader.
In this release the handling of this system property has been changed to match the behavior found in JDK versions prior to 7u55 release, i.e. the singleton ORB is once again located using the thread context class loader of the first thread to call the no-argument ORB.init
method. The change was made to support applications which have been designed to depend on this behavior. Note that this change is applicable to 8u20, 7u65, 6u85 and 5.0u75 releases. For JDK 9, the new behavior where the system wide/singleton ORB needs to be visible to the system class loader, will continue.
See 8042789.
Area: core-libs/java.util.collections
Synopsis: Collection.sort defers now defers to List.sort
Previously Collection.sort
copied the elements of the list to sort into an array, sorted that array, then updated list, in place, with those elements in the array, and the default method List.sort
deferred to Collection.sort. This was a non-optimal arrangement.
From 8u20 release onwards Collection.sort
defers to List.sort
. This means, for example, existing code that calls Collection.sort
with an instance of ArrayList
will now use the optimal sort implemented by ArrayList.
See 8032636.
Area: core-libs/java.net
Synopsis: Digest authentication interop issue
With older versions of Apache Tomcat, certain protocol parameters are expected to be surrounded by double quotes(""). This was the behavior in JDK 7, but was corrected in JDK 8 to be compatible with RFC2617. This caused digest authentication interoperability issues.
Setting the networking property http.auth.digest.quoteParameters
to true restores the JDK 7 behavior for compatibility with the older versions of Tomcat.
See 8034170(not public).
Area: tools/javac
Synopsis: javac crashes when mixing lambdas and inner classes
Previously the following sample code was making the compiler fail with a NPE:
class LambdaExpressionWithNonExistentIdCrashesJavacTest {
void foo() {
bar(()-> {
new NonExistentClass(){
public void any() {}
};
});
}
void bar(Runnable r) {}
}
where the NonExistentClass
was an existing but inaccessible class. Starting with JDK 8u20, javac
produces an error message indicating correctly that symbol "NonExistentClass"
can't be found.
See 8030816.
Area: tools/javac
Synopsis: ElementType.TYPE_USE
is introduced in JDK 8 and should be considered a logical superset of ElementType.TYPE
and ElementType.ANNOTATION_TYPE
. However, the javac
command does not currently recognize ElementType.TYPE_USE
as a superset.
javac
has been corrected to recognize ElementType.TYPE_USE
appropriately.
See 8029017.
Area: tools/javac
Synopsis: javac generates incorrect exception table for multi-catch statements inside a lambda
Handling of try-catch with multiple catches inside a lambda has been corrected.
See 8036942.
Area: core-libs/java.lang.reflect
Synopsis: Default methods affect the result of Class.getMethod
and Class.getMethods
Class.getMethod
and Class.getMethods
were not updated with the 8 release to match the new inheritance definition (both may return non-inherited superinterface methods). Starting with JDK 8u20, the implementation has been changed to match defintion. See JDK 8 Compatibility Guide for more details.
See 8046505.
JDK
Area: install
Synopsis: 64 bit JRE Offline Installer is uncompressed
The 64 bit JRE offline installer for Windows was released as an uncompressed binary in 8u20. In its uncompressed state, the binary is 91.68MB in size.
Only the Windows offline 64 bit JRE bundle is impacted. This does not apply to any other JRE/JDK Windows installers (e.g. 32 bit offline, 32 bit online, or any auto-update bundle, 32 bit or 64 bit).
JavaFX
Area: media
Synopsis: [Linux] JavaFX Media does not run on Ubuntu 14.04
The JavaFX Media component in 8u20 requires the following packages which are not shipped with Ubuntu 14.04:
Ubuntu 14.04 ships with newer, incompatible versions of these packages.
Workaround: install the specific versions of the required packages.
Area: client-libs
Synopsis: JRE 8u20 crashes while using Japanese IM on Windows
The VM crashes while using Swing controls when some Japanese or Chinese characters are input on Windows platform. There is no workaround.
See 8058858 (not public).