跳转到内容

自JDK 10以来的JEP列表

本文罗列了自OpenJDK 10以来各个版本的功能特性,便于追踪某些JEP跨越多个版本的孵化、预览进程。OpenJDK 9及更老版本并未采用此种快速迭代节奏。本文将不定期更新,以跟进最新的JEP计划,历史版本不会被保留。

下表中的上标#代表“孵化”(Incubator),上标*代表“预览”(Preview)。上标符号如有数字,即代表孵化/预览的次数,如*2代表“第二次预览”(Second Preview)。下标括号内的数字代表JDK的版本,其中11、17、21、25为LTS版,其他为非LTS版。

FeaturesJEPs
Ahead-of-Time Method Profiling515(25)515_{(25)}
Ahead-of-Time Command-Line Ergonomics514(25)514_{(25)}
Stable Values502(25)502^{*}_{(25)}
Deprecate & Remove the 32-bit x86 Port501(24)501_{(24)} 503(25)503_{(25)}
Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm497(24)497_{(24)}
Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism496(24)496_{(24)}
Linking Run-Time Images without JMODs493(24)493_{(24)}
Synchronize Virtual Threads without Pinning491(24)491_{(24)}
ZGC: Remove the Non-Generational Mode490(24)490_{(24)}
Ahead-of-Time Class Loading & Linking483(24)483_{(24)}
Key Derivation Function API478(24)478^{*}_{(24)} 510(25)510_{(25)}
Late Barrier Expansion for G1475(24)475_{(24)}
Compact Object Headers450(24)450_{(24)} 519(25)519_{(25)}
Generational Shenandoah (Experimental)404(24)404_{(24)}
Module Import Declarations476(23)476^{*}_{(23)} 494(24)2494^{*2}_{(24)} 511(25)511_{(25)}
Prepare to Restrict the Use of JNI472(24)472_{(24)}
ZGC: Generational Mode by Default474(23)474_{(23)}
Deprecate & Warn upon Use the Memory-Access Methods in sun.misc.Unsafe for Removal471(23)471_{(23)} 498(24)498_{(24)}
Markdown Documentation Comments467(23)467_{(23)}
Primitive Types in Patterns, instanceof, and switch455(23)455^{*}_{(23)} 488(24)2488^{*2}_{(24)} 507(25)3507^{*3}_{(25)}
Stream Gatherers461(22)461^{*}_{(22)} 473(23)2473^{*2}_{(23)} 485(24)485_{(24)}
Launch Multi-File Source-Code Programs458(22)458_{(22)}
Class-File API457(22)457^{*}_{(22)} 466(23)2466^{*2}_{(23)} 484(24)484_{(24)}
Flexible Constructor Bodies447(22)447^{*}_{(22)} 482(23)2482^{*2}_{(23)} 492(24)3492^{*3}_{(24)} 513(25)513_{(25)}
Region Pinning for G1423(22)423_{(22)}
Structured Concurrency428(19)#428^{\#}_{(19)} 437(20)#2437^{\#2}_{(20)} 453(21)453^{*}_{(21)} 462(22)2462^{*2}_{(22)} 480(23)3480^{*3}_{(23)} 499(24)4499^{*4}_{(24)} 505(25)5505^{*5}_{(25)}
Key Encapsulation Mechanism API452(21)452_{(21)}
Prepare to Disallow the Dynamic Loading of Agents451(21)451_{(21)}
Deprecate & Remove the Windows 32-bit x86 Port449(21)449_{(21)} 479(24)479_{(24)}
Compact Source Files and Instance Main Methods445(21)445^{*}_{(21)} 463(22)2463^{*2}_{(22)} 477(23)3477^{*3}_{(23)} 495(24)4495^{*4}_{(24)} 512(25)512_{(25)}
Unnamed Patterns and Variables443(21)443^{*}_{(21)} 456(22)456_{(22)}
Generational ZGC439(21)439_{(21)}
Sequenced Collections431(21)431_{(21)}
String Templates430(21)430^{*}_{(21)} 459(22)2459^{*2}_{(22)}
Scoped Values429(20)#429^{\#}_{(20)} 446(21)446^{*}_{(21)} 464(22)2464^{*2}_{(22)} 481(23)3481^{*3}_{(23)} 487(24)4487^{*4}_{(24)} 506(25)506_{(25)}
Virtual Threads425(19)425^{*}_{(19)} 436(20)2436^{*2}_{(20)} 444(21)444_{(21)}
Linux/RISC-V Port422(19)422_{(19)}
Record Patterns405(19)405^{*}_{(19)} 432(20)2432^{*2}_{(20)} 440(21)440_{(21)}
Deprecate Finalization for Removal421(18)421_{(18)}
Internet-Address Resolution SPI418(18)418_{(18)}
Reimplement Core Reflection with Method Handles416(18)416_{(18)}
Code Snippets in Java API Documentation413(18)413_{(18)}
Simple Web Server408(18)408_{(18)}
UTF-8 by Default400(18)400_{(18)}
Context-Specific Deserialization Filters415(17)415_{(17)}
Foreign Function & Memory API412(17)#412^{\#}_{(17)} 419(18)#2419^{\#2}_{(18)} 424(19)424^{*}_{(19)} 434(20)2434^{*2}_{(20)} 442(21)3442^{*3}_{(21)} 454(22)454_{(22)}
Deprecate & Permanently Disable the Security Manager for Removal411(17)411_{(17)} 486(24)486_{(24)}
Remove the Experimental AOT and JIT Compiler410(17)410_{(17)}
Pattern Matching for switch406(17)406^{*}_{(17)} 420(18)2420^{*2}_{(18)} 427(19)3427^{*3}_{(19)} 433(20)4433^{*4}_{(20)} 441(21)441_{(21)}
Strongly Encapsulate JDK Internals403(17)403_{(17)}
Deprecate the Applet API for Removal398(17)398_{(17)}
macOS/AArch64 Port391(17)391_{(17)}
New macOS Rendering Pipeline382(17)382_{(17)}
Enhanced Pseudo-Random Number Generators356(17)356_{(17)}
Restore Always-Strict Floating-Point Semantics306(17)306_{(17)}
Strongly Encapsulate JDK Internals by Default396(16)396_{(16)}
Warnings for Value-Based Classes390(16)390_{(16)}
Foreign Linker API (Incubator)389(16)#389^{\#}_{(16)}
Windows/AArch64 Port388(16)388_{(16)}
Elastic Metaspace387(16)387_{(16)}
Alpine Linux Port386(16)386_{(16)}
Unix-Domain Socket Channels380(16)380_{(16)}
ZGC: Concurrent Thread-Stack Processing376(16)376_{(16)}
Migrate to GitHub369(16)369_{(16)}
Migrate from Mercurial to Git357(16)357_{(16)}
Enable C++14 Language Features347(16)347_{(16)}
Vector API338(16)#338^{\#}_{(16)} 414(17)#2414^{\#2}_{(17)} 417(18)#3417^{\#3}_{(18)} 426(19)#4426^{\#4}_{(19)} 438(20)#8438^{\#8}_{(20)} 448(21)#6448^{\#6}_{(21)} 460(22)#7460^{\#7}_{(22)} 469(23)#8469^{\#8}_{(23)}
489(24)#9489^{\#9}_{(24)} 508(25)#10508^{\#10}_{(25)}
Deprecate & Remove RMI Activation385(15)385_{(15)} 407(17)407_{(17)}
Disable and Deprecate Biased Locking374(15)374_{(15)}
Reimplement the Legacy DatagramSocket API373(15)373_{(15)}
Hidden Classes371(15)371_{(15)}
Sealed Classes360(15)360^{*}_{(15)} 397(16)2397^{*2}_{(16)} 409(17)409_{(17)}
Edwards-Curve Digital Signature Algorithm (EdDSA)339(15)339_{(15)}
Records359(14)359^{*}_{(14)} 384(15)2384^{*2}_{(15)} 395(16)395_{(16)}
Foreign-Memory Access API370(14)#370^{\#}_{(14)} 383(15)#2383^{\#2}_{(15)} 393(16)#3393^{\#3}_{(16)}
Deprecate the ParallelScavenge + SerialOld GC Combination366(14)366_{(14)}
Remove the Concurrent Mark Sweep (CMS) Garbage Collector363(14)363_{(14)}
Deprecate & Remove the Solaris and SPARC Ports362(14)362_{(14)} 381(15)381_{(15)}
Helpful NullPointerExceptions358(14)358_{(14)}
Non-Volatile Mapped Byte Buffers352(14)352_{(14)}
JFR Event Streaming349(14)349_{(14)}
NUMA-Aware Memory Allocation for G1345(14)345_{(14)}
Packaging Tool343(14)#343^{\#}_{(14)} 392(16)392_{(16)}
Pattern Matching for instanceof305(14)305^{*}_{(14)} 375(15)2375^{*2}_{(15)} 394(16)394_{(16)}
Text Blocks355(13)355^{*}_{(13)} 368(14)2368^{*2}_{(14)} 378(15)378_{(15)}
Reimplement the Legacy Socket API353(13)353_{(13)}
Dynamic CDS Archives350(13)350_{(13)}
Promptly Return Unused Committed Memory from G1346(12)346_{(12)}
Abortable Mixed Collections for G1344(12)344_{(12)}
Default CDS Archives341(12)341_{(12)}
One AArch64 Port, Not Two340(12)340_{(12)}
JVM Constants API334(12)334_{(12)}
Switch Expressions325(12)325^{*}_{(12)} 354(13)2354^{*2}_{(13)} 361(14)361_{(14)}
Microbenchmark Suite230(12)230_{(12)}
Shenandoah: A Low-Pause-Time Garbage Collector189(12)189_{(12)} 379(15)379_{(15)}
Deprecate & Remove the Pack200 Tools and API336(11)336_{(11)} 367(14)367_{(14)}
Deprecate & Remove the Nashorn JavaScript Engine335(11)335_{(11)} 372(15)372_{(15)}
ZGC: A Scalable Low-Latency Garbage Collector333(11)333_{(11)} 351(13)351_{(13)} 364(14)364_{(14)} 365(14)365_{(14)} 377(15)377_{(15)}
Transport Layer Security (TLS) 1.3332(11)332_{(11)}
Low-Overhead Heap Profiling331(11)331_{(11)}
Launch Single-File Source-Code Programs330(11)330_{(11)}
ChaCha20 and Poly1305 Cryptographic Algorithms329(11)329_{(11)}
Flight Recorder328(11)328_{(11)}
Unicode 10327(11)327_{(11)}
Key Agreement with Curve25519 and Curve448324(11)324_{(11)}
Local-Variable Syntax for Lambda Parameters323(11)323_{(11)}
HTTP Client API321(11)321_{(11)}
Remove the Java EE and CORBA Modules320(11)320_{(11)}
Epsilon: A No-Op Garbage Collector318(11)318_{(11)}
Improve Aarch64 Intrinsics315(11)315_{(11)}
Dynamic Class-File Constants309(11)309_{(11)}
Nest-Based Access Control181(11)181_{(11)}
Time-Based Release Versioning322(10)322_{(10)}
Root Certificates319(10)319_{(10)}
Experimental Java-Based JIT Compiler317(10)317_{(10)}
Heap Allocation on Alternative Memory Devices316(10)316_{(10)}
Additional Unicode Language-Tag Extensions314(10)314_{(10)}
Remove the Native-Header Generation Tool (javah)313(10)313_{(10)}
Thread-Local Handshakes312(10)312_{(10)}
Application Class-Data Sharing310(10)310_{(10)}
Parallel Full GC for G1307(10)307_{(10)}
Garbage-Collector Interface304(10)304_{(10)}
Consolidate the JDK Forest into a Single Repository296(10)296_{(10)}
Local-Variable Type Inference286(10)286_{(10)}