219 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			219 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Key:
 | |
| 
 | |
| JDK-X  - https://bugs.openjdk.java.net/browse/JDK-X
 | |
| CVE-XXXX-YYYY: https://cve.mitre.org/cgi-bin/cvename.cgi?name=XXXX-YYYY
 | |
| 
 | |
| New in release OpenJDK 21.0.0 (2023-09-XX):
 | |
| ===========================================
 | |
| Major changes are listed below.  Some changes may have been backported
 | |
| to earlier releases following their first appearance in OpenJDK 21.
 | |
| 
 | |
| The full list of changes in 21u can be found at:
 | |
| -  * https://builds.shipilev.net/backports-monitor/release-notes-21.txt
 | |
| 
 | |
| NEW FEATURES
 | |
| ============
 | |
| 
 | |
| Language Features
 | |
| =================
 | |
| 
 | |
| Pattern Matching for switch
 | |
| ===========================
 | |
| https://openjdk.org/jeps/406
 | |
| https://openjdk.org/jeps/420
 | |
| https://openjdk.org/jeps/427
 | |
| https://openjdk.org/jeps/433
 | |
| https://openjdk.org/jeps/441
 | |
| 
 | |
| Enhance the Java programming language with pattern matching for
 | |
| `switch` expressions and statements, along with extensions to the
 | |
| language of patterns. Extending pattern matching to `switch` allows an
 | |
| expression to be tested against a number of patterns, each with a
 | |
| specific action, so that complex data-oriented queries can be
 | |
| expressed concisely and safely.
 | |
| 
 | |
| This was a preview feature (http://openjdk.java.net/jeps/12)
 | |
| introduced in OpenJDK 17 (JEP 406), which saw a second preview in
 | |
| OpenJDK 18 (JEP 420), a third in OpenJDK 19 (JEP 427) and a fourth
 | |
| (JEP 427) in OpenJDK 20.  It became final with OpenJDK 21 (JEP 441).
 | |
| 
 | |
| Record Patterns
 | |
| ===============
 | |
| https://openjdk.org/jeps/405
 | |
| https://openjdk.org/jeps/432
 | |
| https://openjdk.org/jeps/440
 | |
| 
 | |
| Enhance the Java programming language with record patterns to
 | |
| deconstruct record values. Record patterns and type patterns can be
 | |
| nested to enable a powerful, declarative, and composable form of data
 | |
| navigation and processing.
 | |
| 
 | |
| This was a preview feature (http://openjdk.java.net/jeps/12) introduced
 | |
| in OpenJDK 19 (JEP 405) with a second preview (JEP 432) in OpenJDK 20.
 | |
| It became final with OpenJDK 21 (JEP 440).
 | |
| 
 | |
| String Templates
 | |
| ================
 | |
| https://openjdk.org/jeps/430
 | |
| 
 | |
| Enhance the Java programming language with string templates. String
 | |
| templates complement Java's existing string literals and text blocks
 | |
| by coupling literal text with embedded expressions and template
 | |
| processors to produce specialized results.
 | |
| 
 | |
| This is a preview feature (http://openjdk.java.net/jeps/12) introduced
 | |
| in OpenJDK 21 (JEP 430).
 | |
| 
 | |
| Unnamed Patterns and Variables
 | |
| ==============================
 | |
| https://openjdk.org/jeps/443
 | |
| 
 | |
| Enhance the Java language with unnamed patterns, which match a record
 | |
| component without stating the component's name or type, and unnamed
 | |
| variables, which can be initialized but not used. Both are denoted by
 | |
| an underscore character, _.
 | |
| 
 | |
| This is a preview feature (http://openjdk.java.net/jeps/12) introduced
 | |
| in OpenJDK 21 (JEP 443).
 | |
| 
 | |
| Library Features
 | |
| ================
 | |
| 
 | |
| Vector API
 | |
| ==========
 | |
| https://openjdk.org/jeps/338
 | |
| https://openjdk.org/jeps/414
 | |
| https://openjdk.org/jeps/417
 | |
| https://openjdk.org/jeps/426
 | |
| https://openjdk.org/jeps/438
 | |
| https://openjdk.org/jeps/448
 | |
| 
 | |
| Introduce an API to express vector computations that reliably compile
 | |
| at runtime to optimal vector hardware instructions on supported CPU
 | |
| architectures and thus achieve superior performance to equivalent
 | |
| scalar computations.
 | |
| 
 | |
| This is an incubation feature (https://openjdk.java.net/jeps/11)
 | |
| introduced in OpenJDK 16 (JEP 338). A second round of incubation took
 | |
| place in OpenJDK 17 (JEP 414), OpenJDK 18 (JEP 417) saw a third,
 | |
| OpenJDK 19 a fourth (JEP 426), OpenJDK 20 (JEP 438) a fifth and
 | |
| OpenJDK 21 a sixth (JEP 448).
 | |
| 
 | |
| Foreign Function & Memory API
 | |
| =============================
 | |
| https://openjdk.org/jeps/412
 | |
| https://openjdk.org/jeps/419
 | |
| https://openjdk.org/jeps/424
 | |
| https://openjdk.org/jeps/434
 | |
| https://openjdk.org/jeps/442
 | |
| 
 | |
| Introduce an API by which Java programs can interoperate with code and
 | |
| data outside of the Java runtime. By efficiently invoking foreign
 | |
| functions (i.e., code outside the JVM), and by safely accessing
 | |
| foreign memory (i.e., memory not managed by the JVM), the API enables
 | |
| Java programs to call native libraries and process native data without
 | |
| the brittleness and danger of JNI.
 | |
| 
 | |
| This API is now a preview feature (http://openjdk.java.net/jeps/12).
 | |
| It was first introduced in incubation
 | |
| (https://openjdk.java.net/jeps/11) in OpenJDK 17 (JEP 412), and is an
 | |
| evolution of the Foreign Memory Access API (OpenJDK 14 through 16) and
 | |
| Foreign Linker API (OpenJDK 16) (see release notes for
 | |
| java-17-openjdk). OpenJDK 18 saw a second round of incubation (JEP
 | |
| 419) before its inclusion as a preview in OpenJDK 19 (JEP 424) and a
 | |
| second in OpenJDK 20 (JEP 434). It reaches a third preview in OpenJDK
 | |
| 21 (JEP 442).
 | |
| 
 | |
| Virtual Threads
 | |
| ===============
 | |
| https://openjdk.org/jeps/425
 | |
| https://openjdk.org/jeps/436
 | |
| 
 | |
| Introduce virtual threads to the Java Platform. Virtual threads are
 | |
| lightweight threads that dramatically reduce the effort of writing,
 | |
| maintaining, and observing high-throughput concurrent applications.
 | |
| 
 | |
| This is a preview feature (http://openjdk.java.net/jeps/12) introduced
 | |
| in OpenJDK 19 (JEP 425) and reaching its second preview in OpenJDK 20
 | |
| (JEP 436).
 | |
| 
 | |
| Structured Concurrency
 | |
| ======================
 | |
| https://openjdk.org/jeps/428
 | |
| https://openjdk.org/jeps/437
 | |
| https://openjdk.org/jeps/453
 | |
| 
 | |
| Simplify multithreaded programming by introducing an API for
 | |
| structured concurrency. Structured concurrency treats multiple tasks
 | |
| running in different threads as a single unit of work, thereby
 | |
| streamlining error handling and cancellation, improving reliability,
 | |
| and enhancing observability.
 | |
| 
 | |
| This API is now a preview feature (http://openjdk.java.net/jeps/12) in
 | |
| OpenJDK 21 (JEP 453). It was first introduced in incubation
 | |
| (https://openjdk.java.net/jeps/11) in OpenJDK 19 (JEP 428) and had a
 | |
| second round of incubation in OpenJDK 20 (JEP 437).
 | |
| 
 | |
| Scoped Values
 | |
| =============
 | |
| https://openjdk.org/jeps/429
 | |
| 
 | |
| Introduce scoped values, which enable the sharing of immutable data
 | |
| within and across threads. They are preferred to thread-local
 | |
| variables, especially when using large numbers of virtual threads.
 | |
| 
 | |
| This API is now a preview feature (http://openjdk.java.net/jeps/12)
 | |
| in OpenJDK 21 (JEP 429). It was first introduced in incubation
 | |
| (https://openjdk.java.net/jeps/11) in OpenJDK 20 (JEP 429).
 | |
| 
 | |
| Sequenced Collections
 | |
| =====================
 | |
| https://openjdk.org/jeps/431
 | |
| 
 | |
| Introduce new interfaces to represent collections with a defined
 | |
| encounter order. Each such collection has a well-defined first
 | |
| element, second element, and so forth, up to the last element. It also
 | |
| provides uniform APIs for accessing its first and last elements, and
 | |
| for processing its elements in reverse order.
 | |
| 
 | |
| Key Encapsulation Mechanism API
 | |
| ===============================
 | |
| https://openjdk.org/jeps/452
 | |
| 
 | |
| Introduce an API for key encapsulation mechanisms (KEMs), an
 | |
| encryption technique for securing symmetric keys using public key
 | |
| cryptography.
 | |
| 
 | |
| Virtual Machine Enhancements
 | |
| ============================
 | |
| 
 | |
| Generational ZGC
 | |
| ================
 | |
| https://openjdk.org/jeps/439
 | |
| 
 | |
| Improve application performance by extending the Z Garbage Collector
 | |
| (ZGC) to maintain separate generations for young and old objects. This
 | |
| will allow ZGC to collect young objects — which tend to die young —
 | |
| more frequently.
 | |
| 
 | |
| DEPRECATIONS
 | |
| ============
 | |
| 
 | |
| Deprecate the Windows 32-bit x86 Port for Removal
 | |
| =================================================
 | |
| https://openjdk.org/jeps/449
 | |
| 
 | |
| Deprecate the Windows 32-bit x86 port, with the intent to remove it in
 | |
| a future release.
 | |
| 
 | |
| Prepare to Disallow the Dynamic Loading of Agents
 | |
| =================================================
 | |
| https://openjdk.org/jeps/451
 | |
| 
 | |
| Issue warnings when agents are loaded dynamically into a running
 | |
| JVM. These warnings aim to prepare users for a future release which
 | |
| disallows the dynamic loading of agents by default in order to improve
 | |
| integrity by default. Serviceability tools that load agents at startup
 | |
| will not cause warnings to be issued in any release.
 | |
| 
 |