RELEASE NOTES FOR: 8u102 ==================================================================================================== Notes generated: Mon Apr 01 12:00:20 CEST 2024 Hint: Prefix bug IDs with https://bugs.openjdk.org/browse/ to reach the relevant JIRA entry. JAVA ENHANCEMENT PROPOSALS (JEP): None. RELEASE NOTES: deploy/webstart: JDK-8055448: Set 32 or 64 bit JRE requirements in a JNLP file Web Start applications can now specify requested JREs with their arch attributes, and select the first one available that matches, even if it is not the same arch (32 bit vs 64 bit) as the currently running JRE. For example, the JNLP content below would place first preference on 64 bit JDK8, and if not available, 32 bit JDK9: ``` ``` Note that in the above example, in order to launch a 64 bit 1.8 JRE, a 64 bit 9 JRE must be installed. If only a 32 bit 9 JRE is installed, the 64 bit 1.8 JRE is unavailable. JDK-8147627: 32/64-bit interoperability in Java Web Start The ability to specify a preference to launch a Java Web Start application in 64-bit or 32-bit architectures is now supported, by adding the 'arch' attribute to the JNLP resources block. core-libs/java.lang.invoke: JDK-8081512: Internal package sun.invoke.anon has been removed The internal package sun.invoke.anon has been removed. The functionality it used to provide, namely anonymous class loading with possible constant pool patches, is available via the Unsafe.defineAnonymousClass() method. core-libs/javax.naming: JDK-8149450: Improved exception handling for bad LDAP referral replies The JDK was throwing a NullPointerException when a non-compliant REFERRAL status result was sent but no referral values were included. With this change, a NamingException with message value of "Illegal encoding: referral is empty" will be thrown in such circumstances. See JDK-8149450 and JDK-8154304 for more details hotspot/compiler: JDK-8144957: Removed PICL warning message In 8u40, and 7u80, a new feature was introduced to use the PICL library on Solaris to get some system information. If this library was not found, we printed an error message: Java HotSpot(TM) Server VM warning: PICL (libpicl.so.1) is missing. Performance will not be optimal. This warning was misleading. Not finding the PICL library is a very minor issue, and the warnings mostly lead to confusion. In this release, the warning was removed. security-libs/javax.net.ssl: JDK-8149017: Fix to resolve "Unable to process PreMasterSecret, may be too big" issue Recent JDK updates introduced an issue for applications that depend on having a delayed provider selection mechanism. The issue was introduced in JDK 8u71, JDK 7u95 and JDK 6u111. The main error seen corresponded to an exception like the following : ``` handling exception: javax.net.ssl.SSLProtocolException: Unable to process PreMasterSecret, may be too big ``` JDK-8049321: Support SHA224withDSA and SHA256withDSA in the SunJSSE provider The SHA224withDSA and SHA256withDSA algorithms are now supported in the TLS 1.2 "signature_algorithms" extension in the SunJSSE provider. Note that this extension does not apply to TLS 1.1 and previous versions. core-svc: JDK-8134300: .oracle_jre_usage folder no longer created in C:\Users\myName Since JDK 1.8.0_60, a folder named .oracle_jre_usage gets created in the home directory. This folder and the files inside it are created by the Java Runtime Environment to track the last time a JRE was used. This information is very important in understanding what JRE installations are currently being used on the system. On Windows, this folder gets created under either `C:\Users\\AppData\Local or C:\Users\myName\AppData\Roaming` depending upon whether the user is local, or is a network user. Writing content in this folder over the network on Windows can introduce performance overhead. This problem has been fixed with bug JDK-8134300. With this fix .oracle_jre_usage folder gets created under `%ProgramData%/Oracle/Java/` core-libs/java.nio: JDK-8147468: Ability to limit the capacity of buffers that can be held in the temporary buffer cache The system property `jdk.nio.maxCachedBufferSize` has been introduced in to limit the memory used by the "temporary buffer cache". The temporary buffer cache is a per-thread cache of direct memory used by the NIO implementation to support applications that do I/O with buffers backed by arrays in the java heap. The value of the property is the maximum capacity of a direct buffer that can be cached. If the property is not set then no limit is put on the size of buffers that are cached. Applications with certain patterns of I/O usage may benefit from using this property. In particular if an application does I/O with large multi-megabyte buffers at startup but therefore does I/O with small buffers may see a benefit to using this property. Applications that do I/O using direct buffers will not see any benefit to using this system property. core-svc/javax.management: JDK-6425769: New system property for the remote JMX connector New JMX agent property - `jmxremote.host` A new property, `com.sun.management.jmxremote.host`, is introduced that specifies the bind address for the default JMX agent. If the latter is not specified, the default JMX agent will listen on all interfaces (0.0.0.0) and the host value placed in the agent service URL (JMXServiceURL) is the IP address returned from invocation of `InetAddress.getLocalHost()` method. * Name: `com.sun.management.jmxremote.host` * Definition : Specifies the bind address for the default JMX agent. It can be specified via the command line while starting the JVM or as part of the agent config file (`management.properties`). * Value: IP address of any network interface of the machine hotspot/runtime: JDK-8130425: New property jdk.lang.processReaperUseDefaultStackSize When a large TLS (Thread local storage) size is set for Threads, the JVM results in a stack overflow exception. The reason for this behavior is that the reaper thread was created with a low stack size of 32768k. When a large TLS size is set, it steals space from the threads stack, which eventually results in a stack overflow. This is a known glibc bug. To overcome this issue, we have introduced a workaround (jdk.lang.processReaperUseDefaultStackSize) in which the user can set the reaper threads stack size to a default instead of to 32768. This gives the reaper thread a bigger stack size, so for a large TLS size, such as 32k, the process will not fail. Users can set this flag in one of two ways: 1. -Djdk.lang.processReaperUseDefaultStackSize=true 2. System.setProperty("jdk.lang.processReaperUseDefaultStackSize", "true") The problem has been observed only when JVM is started from JNI code in which TLS is declared using "__thread" security-libs/java.security: JDK-8141540: Comodo Root CA removed The Comodo "UTN - DATACorp SGC" root CA certificate has been removed from the cacerts file. JDK-8072463: Modify requirements on Authority Key Identifier extension field during X509 certificate chain building The requirement to have the Authority Key Identifier (AKID) and Subject Key Identifier (SKID) fields matching when building X509 certificate chains has been modified for some cases. hotspot/gc: JDK-8150518: With UseG1GC, specifying -XX:ParallelGCThreads=0 is no longer allowed With UseG1GC, specifying -XX:ParallelGCThreads=0 is no longer allowed. Previously, with -XX:ParallelGCThreads=0, G1 would execute some tasks using serial code executed by the VM thread. The closest approximation of this behavior is to specify -XX:ParallelGCThreads=1, which causes parallel tasks to be executed by a single GC worker thread using parallel code. JDK-8072725: Providing more granular levels for GC verification This enhancement provides a way to specify more granular levels for the GC verification enabled using the "VerifyBeforeGC", "VerifyAfterGC" and "VerifyDuringGC" diagnostic options. It introduces a new diagnostic option VerifySubSet using which one can specify the subset of the memory system that should be verified. With this new option, one or more sub-systems can be specified in a comma separated string. Valid memory sub-systems are: threads, heap, symbol_table, string_table, codecache, dictionary, classloader_data_graph, metaspace, jni_handles, c-heap and codecache_oops. During the GC verification, only the sub-systems specified using VerifySubSet get verified: ``` D:\tests>java -XX:+UnlockDiagnosticVMOptions -XX:+VerifyBeforeGC -XX:VerifySubSet="threads,c-heap" -Xlog:gc+verify=debug Test [0.095s][debug ][gc,verify] Threads [0.099s][debug ][gc,verify] C-heap [0.105s][info ][gc,verify] Verifying Before GC (0.095s, 0.105s) 10.751ms [0.120s][debug ][gc,verify] Threads [0.124s][debug ][gc,verify] C-heap [0.130s][info ][gc,verify] Verifying Before GC (0.120s, 0.130s) 9.951ms [0.148s][debug ][gc,verify] Threads [0.152s][debug ][gc,verify] C-heap ``` If any invalid memory sub-systems are specified with VerifySubSet, Java process exits with the following error message: ``` D:\tests>java -XX:+UnlockDiagnosticVMOptions -XX:+VerifyBeforeGC -XX:VerifySubSet="threads,c-heap,hello" -Xlog:gc+verify=debug oom Error occurred during initialization of VM VerifySubSet: 'hello' memory sub-system is unknown, please correct it ``` ALL FIXED ISSUES, BY COMPONENT AND PRIORITY: client-libs: (P4) JDK-8140620: Find and load default.sf2 as the default soundbank on Linux client-libs/2d: (P3) JDK-8073400: Some Monospaced logical fonts have a different width (P3) JDK-8076545: Text size is twice bigger under Windows L&F on Win 8.1 with HiDPI display (P3) JDK-8146035: Windows - With LCD antialiasing, some glyphs are not rendered correctly (P4) JDK-8154625: [Parfait] JNI exception pending in fontpath.c:1300 client-libs/java.awt: (P2) JDK-8163583: [macosx] Press "To Back" button on the Dialog,the Dialog moves behind the Frame (P2) JDK-8139581: AWT components are not drawn after removal and addition to a container (P3) JDK-8148984: [macosx] Chinese Comma cannot be entered using Pinyin Input Method on OS X (P3) JDK-8080729: [macosx] java 7 and 8 JDialogs on multiscreen jump to parent frame on focus (P3) JDK-8130242: DataFlavorComparator transitivity exception (P3) JDK-8151998: VS2010 ThemeReader.cpp(758) : error C3861: 'round': identifier not found (P4) JDK-6961123: setWMClass fails to null-terminate WM_CLASS string client-libs/javax.accessibility: (P3) JDK-8145228: Java Access Bridge, getAccessibleStatesStringFromContext doesn't wrap the call to getAccessibleRole client-libs/javax.swing: (P2) JDK-8157838: Personalized Windows Font Size is not taken into account in Java8u102 (P4) JDK-8149453: [hidpi] JFileChooser does not scale properly on Windows with HiDPI display and Windows L&F (P4) JDK-8149368: [hidpi] JLabel font is twice bigger than JTextArea font on Windows 7,HiDPI, Windows L&F core-libs: (P3) JDK-8081771: ProcessTool.createJavaProcessBuilder() needs new addTestVmAndJavaOptions argument core-libs/java.lang: (P3) JDK-8149330: Capacity of StringBuilder should not get close to Integer.MAX_VALUE unless necessary (P4) JDK-8059677: Thread.getName() instantiates Strings core-libs/java.lang.invoke: (P4) JDK-8081512: Remove sun.invoke.anon classes, or move / co-locate them with tests core-libs/java.net: (P3) JDK-8071125: Improve exception messages in URLPermission (P3) JDK-8135259: InetAddress.getAllByName only reports "unknown error" instead of actual cause (P3) JDK-8159410: InetAddress.isReachable returns true for non existing IP addresses (P3) JDK-8065078: NetworkInterface.getNetworkInterfaces() triggers intermittent test failures (P4) JDK-8065076: java/net/SocketPermission/SocketPermissionTest.java fails intermittently (P4) JDK-8145388: URLConnection.guessContentTypeFromStream returns image/jpg for some JPEG images core-libs/java.nio: (P4) JDK-8147468: (bf) Allow users to bound the size of buffers cached in the per-thread buffer caches core-libs/java.rmi: (P3) JDK-8046339: sun.rmi.transport.DGCAckHandler leaks memory core-libs/java.text: (P3) JDK-8151431: DateFormatSymbols triggers this.clone() in the constructor core-libs/java.util: (P4) JDK-8141243: Unexpected timezone returned after parsing a date core-libs/java.util.concurrent: (P3) JDK-8054446: Repeated offer and remove on ConcurrentLinkedQueue lead to an OutOfMemoryError core-libs/java.util.jar: (P3) JDK-8148627: RestrictTestMaxCachedBufferSize.java to 64-bit platforms core-libs/java.util.logging: (P3) JDK-8148820: Missing @since Javadoc tag in Logger.log(Level, Supplier) core-libs/java.util:collections: (P4) JDK-8068427: Hashtable deserialization reconstitutes table with wrong capacity core-libs/javax.naming: (P3) JDK-8141148: LDAP "follow" throws ClassCastException with Java 8 (P3) JDK-8149450: LdapCtx.processReturnCode() throwing Null Pointer Exception (P3) JDK-8154304: NullpointerException at LdapReferralException.getReferralContext core-libs/jdk.nashorn: (P3) JDK-8149744: fix testng.jar delivery in Nashorn build.xml (P3) JDK-8148379: jdk.nashorn.api.scripting spec. adjustments, clarifications (P3) JDK-8149334: JSON.parse(JSON.stringify([])).push(10) creates an array containing two elements (P4) JDK-8148926: Call site profiling fails on braces-wrapped anonymous function core-svc: (P2) JDK-8134300: .oracle_jre_usage folder must not be created in C:\Users\myName core-svc/debugger: (P4) JDK-4858370: JDWP: Memory Leak: GlobalRefs never deleted when processing invokeMethod command (P4) JDK-4515292: ReferenceType.isStatic() returns true for arrays core-svc/java.lang.management: (P3) JDK-8145982: JMXInterfaceBindingTest is failing intermittently (P3) JDK-8146015: JMXInterfaceBindingTest is failing intermittently for IPv6 addresses core-svc/javax.management: (P4) JDK-6425769: Allow specifying an address to bind JMX remote connector deploy: (P3) JDK-8133495: Platform.getInstalledJREList() returns only the jres of the current arch on windows. deploy/webstart: (P2) JDK-8149497: cannot relaunch to alternate architecture (P3) JDK-8147627: 64 bit only app may have problems when initially launched with 32 bit javaws (P3) JDK-8003984: Allow relaunch between 32 / 64 bit versions in Java Web Start when you have latest versions of both (P3) JDK-8055448: Provide a way to specify JRE data model requirements in JNLP file (P3) JDK-8131070: re enable secure launcher for cross platform launches. (P3) JDK-6999748: Uninstaller Error occurs while trying to uninstall apps imported by 32 bit JWS on 64 bit systems (P3) JDK-8153087: URL Scheme handler problem hotspot/compiler: (P1) JDK-8055530: assert(_exits.control()->is_top() || !_gvn.type(ret_phi)->empty()) failed: return value must be well defined (P2) JDK-8141420: Compiler runtime entries don't hold Klass* from being GCed (P2) JDK-8148752: MethodHandle inlining with long/double arguments is broken in C2 (P3) JDK-8147645: get_ctrl_no_update() code is wrong (P3) JDK-8149543: range check CastII nodes should not be split through Phi (P3) JDK-8144957: Remove PICL warning message (P4) JDK-8141551: C2 can not handle returns with incompatible interface arrays hotspot/gc: (P1) JDK-8076995: gc/ergonomics/TestDynamicNumberOfGCThreads.java failed with java.lang.RuntimeException: 'new_active_workers' missing from stdout/stderr (P2) JDK-8150518: G1 GC crashes at G1CollectedHeap::do_collection_pause_at_safepoint(double) (P2) JDK-8133023: ParallelGCThreads is not calculated correctly (P3) JDK-8154722: Test gc/ergonomics/TestDynamicNumberOfGCThreads.java fails (P3) JDK-8152438: Threads may do significant work out of the non-shared overflow buffer (P4) JDK-8150002: Check for the validity of oop before printing it in verify_remembered_set (P4) JDK-8017462: G1: guarantee fails with UseDynamicNumberOfGCThreads (P4) JDK-8072725: Provide more granular levels for GC verification hotspot/jvmti: (P3) JDK-8151064: com/sun/jdi/RedefineAddPrivateMethod.sh fails intermittently (P3) JDK-8149743: JVM crash after debugger hotswap with lambdas (P4) JDK-6976636: JVM/TI test ex03t001 fails assertion hotspot/runtime: (P3) JDK-8153641: assert(thread_state == _thread_in_native) failed: Assumed thread_in_native while heap dump (P3) JDK-8130425: libjvm crash due to stack overflow in executables with 32k tbss/tdata (P4) JDK-8153673: [BACKOUT] JDWP: Memory Leak: GlobalRefs never deleted when processing invokeMethod command (P4) JDK-8139040: Fix initializations before ShouldNotReachHere() etc. and enable -Wuninitialized on linux. (P4) JDK-8141445: Use of Solaris/SPARC M7 libadimalloc.so can generate unknown signal in hs_err file hotspot/svc: (P4) JDK-8129419: heapDumper.cpp: assert(length_in_bytes > 0) failed: nothing to copy javafx/build: (P2) JDK-8154803: Update license text in javadoc footer for FX API docs (P4) JDK-8149547: checkrepo should suggest -a (P4) JDK-8151865: JavaFX Gradle build script fails with Gradle 2.12 (P4) JDK-8150260: make checkrepo executable bit optional javafx/controls: (P2) JDK-8157398: [TreeTableView] graphic property of TreeItem is still visible after collapsing tree (P3) JDK-8151756: JavaFX CSS is applied redundantly leading to significant performance degradation (P3) JDK-8146325: Spinner throws a ClassCastException under Linux (P4) JDK-8088397: [Dialog] ButtonType text not updated when Locale changes (P4) JDK-8145567: Slider: snapToTicks not honoured on changing to true javafx/media: (P2) JDK-8150503: Provide media support for libav version 55 and 56 (P3) JDK-8130750: JFXMedia Player EventQueueThread does not always terminate javafx/web: (P3) JDK-8139317: [Mac] SecurityException when constructing WebView from JFXPanel application (P3) JDK-8088916: Replace sun.net.www.ParseUtil#decode with public API (P3) JDK-8088689: Several fast/regions/webkit-* tests fail (P3) JDK-8133775: Some WebNode tests crash JVM (P3) JDK-8154161: Webkit: Conversion from string literal loses const qualifier (P4) JDK-8089842: JavaScript2Java Bridge: A char value cannot be set from JavaScript other-libs/corba: (P3) JDK-8144144: ORB destroy() leaks filedescriptors after unsuccessful connection security-libs/java.security: (P2) JDK-8141540: Remove "UTN - DATACorp SGC" Root CA Certificate (P3) JDK-8149411: PKCS12KeyStore cannot extract AES Secret Keys (P3) JDK-8072463: Remove requirement that AKID and SKID have to match when building certificate chain security-libs/javax.crypto: (P3) JDK-8149417: Use final restricted flag (P4) JDK-8133535: Better exception messaging in Ucrypto code security-libs/javax.net.ssl: (P2) JDK-8149017: Delayed provider selection broken in RSA client key exchange. (P2) JDK-8049321: Support SHA224withDSA and SHA256withDSA in the SunJSSE provider (P3) JDK-8069253: javax/net/ssl/TLS/TestJSSE.java failed on Mac (P4) JDK-8061464: A typo in CipherTestUtils test (P4) JDK-8146192: Add test for JDK-8049321 (P4) JDK-8153531: Improve exception messaging for RSAClientKeyExchange (P4) JDK-8158111: Make handling of 3rd party providers more stable security-libs/javax.smartcardio: (P3) JDK-8153438: Avoid repeated "Please insert a smart card" popup windows security-libs/javax.xml.crypto: (P3) JDK-8149029: Secure validation of XML based digital signature always enabled when checking wrapping attacks tools/javac: (P3) JDK-8130304: Inference: NodeNotFoundException thrown with deep generic method call chain (P3) JDK-8066871: java.lang.VerifyError: Bad local variable type - local final String (P3) JDK-8143647: Javac compiles method reference that allows results in an IllegalAccessError xml/javax.xml.parsers: (P3) JDK-8072081: Supplementary characters are rejected in comments xml/jaxb: (P3) JDK-8145039: JAXB marshaller fails with ClassCastException on classes generated by xjc (P3) JDK-8073872: Schemagen fails with StackOverflowError if element references containing class (P3) JDK-8134111: Unmarshaller unmarshalls XML element which doesn't have the expected namespace xml/jaxp: (P3) JDK-8149915: enabling validate-annotations feature for xsd schema with annotation causes NPE (P3) JDK-8144593: Suppress not recognized property/feature warning messages from SAXParser (P3) JDK-8150704: XALAN: ERROR: 'No more DTM IDs are available' when transforming with lots of temporary result trees (P3) JDK-8145974: XMLStreamWriter produces invalid XML for surrogate pairs on OutputStreamWriter