277 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			277 lines
		
	
	
		
			9.8 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 23.0.0 (2024-09-17):
 | |
| ===========================================
 | |
| Major changes are listed below.  Some changes may have been backported
 | |
| to earlier releases following their first appearance in OpenJDK 22
 | |
| through to 25.
 | |
| 
 | |
| NEW FEATURES
 | |
| ============
 | |
| 
 | |
| Language Features
 | |
| =================
 | |
| 
 | |
| Flexible Constructor Bodies
 | |
| ============================
 | |
| https://openjdk.org/jeps/447
 | |
| https://openjdk.org/jeps/482
 | |
| 
 | |
| In constructors in the Java programming language, allow statements to
 | |
| appear before an explicit constructor invocation, i.e., super(..) or
 | |
| this(..). The statements cannot reference the instance under
 | |
| construction, but they can initialize its fields. Initializing fields
 | |
| before invoking another constructor makes a class more reliable when
 | |
| methods are overridden.
 | |
| 
 | |
| This was introduced as a preview language feature
 | |
| (http://openjdk.java.net/jeps/12) in OpenJDK 22 (JEP 447) under the
 | |
| name "Statements before super(...)".  It reaches a second preview in
 | |
| OpenJDK 23 (JEP 482) with the addition of allowing fields to be
 | |
| initialized before invoking another constructor.
 | |
| 
 | |
| Unnamed Patterns and Variables
 | |
| ==============================
 | |
| https://openjdk.org/jeps/443
 | |
| https://openjdk.org/jeps/456
 | |
| 
 | |
| 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 feature is now final. It was a preview feature
 | |
| (http://openjdk.java.net/jeps/12) in OpenJDK 21 (JEP 443).
 | |
| 
 | |
| Primitive Types in Patterns, instanceof, and switch
 | |
| ===================================================
 | |
| https://openjdk.org/jeps/455
 | |
| 
 | |
| Enhance pattern matching by allowing primitive type patterns in all
 | |
| pattern contexts, and extend instanceof and switch to work with all
 | |
| primitive types.
 | |
| 
 | |
| This is a preview language feature (http://openjdk.java.net/jeps/12)
 | |
| introduced in OpenJDK 23 (JEP 455).
 | |
| 
 | |
| Module Import Declarations
 | |
| ==========================
 | |
| https://openjdk.org/jeps/476
 | |
| 
 | |
| Enhance the Java programming language with the ability to succinctly
 | |
| import all of the packages exported by a module. This simplifies the
 | |
| reuse of modular libraries, but does not require the importing code to
 | |
| be in a module itself.
 | |
| 
 | |
| This is a preview language feature (http://openjdk.java.net/jeps/12)
 | |
| introduced in OpenJDK 23 (JEP 476).
 | |
| 
 | |
| Library Features
 | |
| ================
 | |
| 
 | |
| 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
 | |
| https://openjdk.org/jeps/454
 | |
| 
 | |
| 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 finalised. 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 feature
 | |
| (http://openjdk.java.net/jeps/12) in OpenJDK 19 (JEP 424). A second
 | |
| preview took place in OpenJDK 20 (JEP 434) and a third and final
 | |
| preview in OpenJDK 21 (JEP 442).
 | |
| 
 | |
| Class-File API
 | |
| ==============
 | |
| https://openjdk.org/jeps/457
 | |
| https://openjdk.org/jeps/466
 | |
| 
 | |
| Provide a standard API for parsing, generating, and transforming Java
 | |
| class files.
 | |
| 
 | |
| This is a preview library feature (http://openjdk.java.net/jeps/12)
 | |
| introduced in OpenJDK 22 (JEP 457) with a second preview in OpenJDK 23
 | |
| (JEP 466).
 | |
| 
 | |
| 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
 | |
| https://openjdk.org/jeps/460
 | |
| https://openjdk.org/jeps/469
 | |
| 
 | |
| 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, OpenJDK
 | |
| 21 a sixth (JEP 448), OpenJDK 22 a seventh (JEP 460) and it reaches
 | |
| its eighth in OpenJDK 23 (JEP 469).
 | |
| 
 | |
| Stream Gatherers
 | |
| ================
 | |
| https://openjdk.org/jeps/461
 | |
| https://openjdk.org/jeps/473
 | |
| 
 | |
| Enhance the Stream API to support custom intermediate operations. This
 | |
| will allow stream pipelines to transform data in ways that are not
 | |
| easily achievable with the existing built-in intermediate operations.
 | |
| 
 | |
| This is a preview library feature (http://openjdk.java.net/jeps/12)
 | |
| introduced in OpenJDK 22 (JEP 461) with a second preview in OpenJDK 23
 | |
| (JEP 473).
 | |
| 
 | |
| Structured Concurrency
 | |
| ======================
 | |
| https://openjdk.org/jeps/428
 | |
| https://openjdk.org/jeps/437
 | |
| https://openjdk.org/jeps/453
 | |
| https://openjdk.org/jeps/462
 | |
| https://openjdk.org/jeps/480
 | |
| 
 | |
| 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 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). It became a
 | |
| preview feature (http://openjdk.java.net/jeps/12) in OpenJDK 21 (JEP
 | |
| 453), reached its second preview in OpenJDK 22 (JEP 462) and has
 | |
| a third preview in OpenJDK 23 (JEP 480).
 | |
| 
 | |
| Implicitly Declared Classes and Instance Main Methods
 | |
| =====================================================
 | |
| https://openjdk.org/jeps/445
 | |
| https://openjdk.org/jeps/463
 | |
| https://openjdk.org/jeps/477
 | |
| 
 | |
| Evolve the Java language so that students can write their first
 | |
| programs without needing to understand language features designed for
 | |
| large programs. Far from using a separate dialect of Java, students
 | |
| can write streamlined declarations for single-class programs and then
 | |
| seamlessly expand their programs to use more advanced features as
 | |
| their skills grow.
 | |
| 
 | |
| This library feature was introduced as a preview
 | |
| (http://openjdk.java.net/jeps/12) in OpenJDK 21 (JEP 445) under the
 | |
| name "Unnamed Classes and Instance Main Methods". It reaches a second
 | |
| preview in OpenJDK 22 (JEP 463) and a third in OpenJDK 23 (JEP 477)
 | |
| under a new name, due to the move away from unnamed classes to an
 | |
| implicitly declared name chosen by the host system.
 | |
| 
 | |
| Scoped Values
 | |
| =============
 | |
| https://openjdk.org/jeps/429
 | |
| https://openjdk.org/jeps/446
 | |
| https://openjdk.org/jeps/464
 | |
| https://openjdk.org/jeps/481
 | |
| 
 | |
| 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 was first introduced in incubation
 | |
| (https://openjdk.java.net/jeps/11) in OpenJDK 20 (JEP 429). It became
 | |
| a preview feature (http://openjdk.java.net/jeps/12) in OpenJDK 21 (JEP
 | |
| 446), reached its second preview in OpenJDK 22 (JEP 464) and a third
 | |
| in OpenJDK 23 (JEP 481).
 | |
| 
 | |
| Virtual Machine Enhancements
 | |
| ============================
 | |
| 
 | |
| Region Pinning for G1
 | |
| =====================
 | |
| https://openjdk.org/jeps/423
 | |
| 
 | |
| Reduce latency by implementing region pinning in G1, so that garbage
 | |
| collection need not be disabled during Java Native Interface (JNI)
 | |
| critical regions.
 | |
| 
 | |
| ZGC: Generational Mode by Default
 | |
| =================================
 | |
| https://openjdk.org/jeps/474
 | |
| 
 | |
| Switch the default mode of the Z Garbage Collector (ZGC) to the
 | |
| generational mode. Deprecate the non-generational mode, with the
 | |
| intent to remove it in a future release.
 | |
| 
 | |
| Tools
 | |
| =====
 | |
| 
 | |
| Launch Multi-File Source-Code Programs
 | |
| ======================================
 | |
| https://openjdk.org/jeps/458
 | |
| 
 | |
| Enhance the java application launcher to be able to run a program
 | |
| supplied as multiple files of Java source code. This will make the
 | |
| transition from small programs to larger ones more gradual, enabling
 | |
| developers to choose whether and when to go to the trouble of
 | |
| configuring a build tool.
 | |
| 
 | |
| Markdown Documentation Comments
 | |
| ===============================
 | |
| https://openjdk.org/jeps/467
 | |
| 
 | |
| Enable JavaDoc documentation comments to be written in Markdown rather
 | |
| than solely in a mixture of HTML and JavaDoc @-tags.
 | |
| 
 | |
| DEPRECATIONS
 | |
| ============
 | |
| 
 | |
| Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal
 | |
| ==================================================================
 | |
| https://openjdk.org/jeps/471
 | |
| 
 | |
| Deprecate the memory-access methods in sun.misc.Unsafe for removal in
 | |
| a future release. These unsupported methods have been superseded by
 | |
| standard APIs, namely the VarHandle API (JEP 193, OpenJDK 9) and the
 | |
| Foreign Function & Memory API (JEP 454, OpenJDK 22). We strongly
 | |
| encourage library developers to migrate from sun.misc.Unsafe to
 | |
| supported replacements, so that applications can migrate smoothly to
 | |
| modern JDK releases.
 | |
| 
 | |
| REMOVALS
 | |
| ========
 | |
| 
 | |
| String Templates
 | |
| ================
 | |
| https://openjdk.org/jeps/430
 | |
| https://openjdk.org/jeps/459
 | |
| https://openjdk.org/jeps/465
 | |
| 
 | |
| This was a preview feature (http://openjdk.java.net/jeps/12)
 | |
| introduced in OpenJDK 21 (JEP 430) with a second preview in OpenJDK 22
 | |
| (JEP 459).  A third preview was proposed but ultimately withdrawn for
 | |
| OpenJDK 23 (JEP 465) and the feature is no longer present.  See [0]
 | |
| for further explanation.
 | |
| 
 | |
| [0] https://mail.openjdk.org/pipermail/amber-spec-experts/2024-April/004106.html
 |