跳转到内容

自JDK 10以来的JEP列表

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

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

Features JEPs
JFR In-Process Data Redaction 536(27)536_{(27)}
Post-Quantum Hybrid Key Exchange for TLS 1.3 527(27)527_{(27)}
Make G1 the Default Garbage Collector in All Environments 523(27)523_{(27)}
G1 GC: Improve Throughput by Reducing Synchronization 522(26)522_{(26)}
HTTP/3 for the HTTP Client API 517(26)517_{(26)}
Ahead-of-Time Object Caching with Any GC 516(26)516_{(26)}
Remove the Applet API 504(26)504_{(26)}
Prepare to Make Final Mean Final 500(26)500_{(26)}
Generational Shenandoah 521(25)521_{(25)}
JFR Method Timing & Tracing 520(25)520_{(25)}
JFR Cooperative Sampling 518(25)518_{(25)}
PEM Encodings of Cryptographic Objects 470(25)470^{*}_{(25)} 524(26)2524^{*2}_{(26)} 538(27)3538^{*3}_{(27)}
Ahead-of-Time Method Profiling 515(25)515_{(25)}
Ahead-of-Time Command-Line Ergonomics 514(25)514_{(25)}
JFR CPU-Time Profiling (Experimental) 509(25)509_{(25)}
Stable Values / Lazy Constants 502(25)502^{*}_{(25)} 526(26)2526^{*2}_{(26)} 531(27)3531^{*3}_{(27)}
Deprecate & Remove the 32-bit x86 Port 501(24)501_{(24)} 503(25)503_{(25)}
Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm 497(24)497_{(24)}
Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism 496(24)496_{(24)}
Linking Run-Time Images without JMODs 493(24)493_{(24)}
Synchronize Virtual Threads without Pinning 491(24)491_{(24)}
ZGC: Remove the Non-Generational Mode 490(24)490_{(24)}
Ahead-of-Time Class Loading & Linking 483(24)483_{(24)}
Key Derivation Function API 478(24)478^{*}_{(24)} 510(25)510_{(25)}
Late Barrier Expansion for G1 475(24)475_{(24)}
Compact Object Headers by Default 534(27)534_{(27)}
Compact Object Headers 450(24)450_{(24)} 519(25)519_{(25)}
Generational Shenandoah (Experimental) 404(24)404_{(24)}
Module Import Declarations 476(23)476^{*}_{(23)} 494(24)2494^{*2}_{(24)} 511(25)511_{(25)}
Prepare to Restrict the Use of JNI 472(24)472_{(24)}
ZGC: Generational Mode by Default 474(23)474_{(23)}
Deprecate & Warn upon Use the Memory-Access Methods in sun.misc.Unsafe for Removal 471(23)471_{(23)} 498(24)498_{(24)}
Markdown Documentation Comments 467(23)467_{(23)}
Primitive Types in Patterns, instanceof, and switch 455(23)455^{*}_{(23)} 488(24)2488^{*2}_{(24)} 507(25)3507^{*3}_{(25)} 530(26)4530^{*4}_{(26)} 532(27)5532^{*5}_{(27)}
Stream Gatherers 461(22)461^{*}_{(22)} 473(23)2473^{*2}_{(23)} 485(24)485_{(24)}
Launch Multi-File Source-Code Programs 458(22)458_{(22)}
Class-File API 457(22)457^{*}_{(22)} 466(23)2466^{*2}_{(23)} 484(24)484_{(24)}
Flexible Constructor Bodies 447(22)447^{*}_{(22)} 482(23)2482^{*2}_{(23)} 492(24)3492^{*3}_{(24)} 513(25)513_{(25)}
Region Pinning for G1 423(22)423_{(22)}
Structured Concurrency 428(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)} 525(26)6525^{*6}_{(26)} 533(27)7533^{*7}_{(27)}
Key Encapsulation Mechanism API 452(21)452_{(21)}
Prepare to Disallow the Dynamic Loading of Agents 451(21)451_{(21)}
Deprecate & Remove the Windows 32-bit x86 Port 449(21)449_{(21)} 479(24)479_{(24)}
Compact Source Files and Instance Main Methods 445(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 Variables 443(21)443^{*}_{(21)} 456(22)456_{(22)}
Generational ZGC 439(21)439_{(21)}
Sequenced Collections 431(21)431_{(21)}
String Templates 430(21)430^{*}_{(21)} 459(22)2459^{*2}_{(22)}
Scoped Values 429(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 Threads 425(19)425^{*}_{(19)} 436(20)2436^{*2}_{(20)} 444(21)444_{(21)}
Linux/RISC-V Port 422(19)422_{(19)}
Record Patterns 405(19)405^{*}_{(19)} 432(20)2432^{*2}_{(20)} 440(21)440_{(21)}
Deprecate Finalization for Removal 421(18)421_{(18)}
Internet-Address Resolution SPI 418(18)418_{(18)}
Reimplement Core Reflection with Method Handles 416(18)416_{(18)}
Code Snippets in Java API Documentation 413(18)413_{(18)}
Simple Web Server 408(18)408_{(18)}
UTF-8 by Default 400(18)400_{(18)}
Context-Specific Deserialization Filters 415(17)415_{(17)}
Foreign Function & Memory API 412(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 Removal 411(17)411_{(17)} 486(24)486_{(24)}
Remove the Experimental AOT and JIT Compiler 410(17)410_{(17)}
Pattern Matching for switch 406(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 Internals 403(17)403_{(17)}
Deprecate the Applet API for Removal 398(17)398_{(17)}
macOS/AArch64 Port 391(17)391_{(17)}
New macOS Rendering Pipeline 382(17)382_{(17)}
Enhanced Pseudo-Random Number Generators 356(17)356_{(17)}
Restore Always-Strict Floating-Point Semantics 306(17)306_{(17)}
Strongly Encapsulate JDK Internals by Default 396(16)396_{(16)}
Warnings for Value-Based Classes 390(16)390_{(16)}
Foreign Linker API (Incubator) 389(16)#389^{\#}_{(16)}
Windows/AArch64 Port 388(16)388_{(16)}
Elastic Metaspace 387(16)387_{(16)}
Alpine Linux Port 386(16)386_{(16)}
Unix-Domain Socket Channels 380(16)380_{(16)}
ZGC: Concurrent Thread-Stack Processing 376(16)376_{(16)}
Migrate to GitHub 369(16)369_{(16)}
Migrate from Mercurial to Git 357(16)357_{(16)}
Enable C++14 Language Features 347(16)347_{(16)}
Vector API 338(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)} 529(26)#11529^{\#11}_{(26)} 537(27)#12537^{\#12}_{(27)}
Deprecate & Remove RMI Activation 385(15)385_{(15)} 407(17)407_{(17)}
Disable and Deprecate Biased Locking 374(15)374_{(15)}
Reimplement the Legacy DatagramSocket API 373(15)373_{(15)}
Hidden Classes 371(15)371_{(15)}
Sealed Classes 360(15)360^{*}_{(15)} 397(16)2397^{*2}_{(16)} 409(17)409_{(17)}
Edwards-Curve Digital Signature Algorithm (EdDSA) 339(15)339_{(15)}
Records 359(14)359^{*}_{(14)} 384(15)2384^{*2}_{(15)} 395(16)395_{(16)}
Foreign-Memory Access API 370(14)#370^{\#}_{(14)} 383(15)#2383^{\#2}_{(15)} 393(16)#3393^{\#3}_{(16)}
Deprecate the ParallelScavenge + SerialOld GC Combination 366(14)366_{(14)}
Remove the Concurrent Mark Sweep (CMS) Garbage Collector 363(14)363_{(14)}
Deprecate & Remove the Solaris and SPARC Ports 362(14)362_{(14)} 381(15)381_{(15)}
Helpful NullPointerExceptions 358(14)358_{(14)}
Non-Volatile Mapped Byte Buffers 352(14)352_{(14)}
JFR Event Streaming 349(14)349_{(14)}
NUMA-Aware Memory Allocation for G1 345(14)345_{(14)}
Packaging Tool 343(14)#343^{\#}_{(14)} 392(16)392_{(16)}
Pattern Matching for instanceof 305(14)305^{*}_{(14)} 375(15)2375^{*2}_{(15)} 394(16)394_{(16)}
Text Blocks 355(13)355^{*}_{(13)} 368(14)2368^{*2}_{(14)} 378(15)378_{(15)}
Reimplement the Legacy Socket API 353(13)353_{(13)}
Dynamic CDS Archives 350(13)350_{(13)}
Promptly Return Unused Committed Memory from G1 346(12)346_{(12)}
Abortable Mixed Collections for G1 344(12)344_{(12)}
Default CDS Archives 341(12)341_{(12)}
One AArch64 Port, Not Two 340(12)340_{(12)}
JVM Constants API 334(12)334_{(12)}
Switch Expressions 325(12)325^{*}_{(12)} 354(13)2354^{*2}_{(13)} 361(14)361_{(14)}
Microbenchmark Suite 230(12)230_{(12)}
Shenandoah: A Low-Pause-Time Garbage Collector 189(12)189_{(12)} 379(15)379_{(15)}
Deprecate & Remove the Pack200 Tools and API 336(11)336_{(11)} 367(14)367_{(14)}
Deprecate & Remove the Nashorn JavaScript Engine 335(11)335_{(11)} 372(15)372_{(15)}
ZGC: A Scalable Low-Latency Garbage Collector 333(11)333_{(11)} 351(13)351_{(13)} 364(14)364_{(14)} 365(14)365_{(14)} 377(15)377_{(15)}
Transport Layer Security (TLS) 1.3 332(11)332_{(11)}
Low-Overhead Heap Profiling 331(11)331_{(11)}
Launch Single-File Source-Code Programs 330(11)330_{(11)}
ChaCha20 and Poly1305 Cryptographic Algorithms 329(11)329_{(11)}
Flight Recorder 328(11)328_{(11)}
Unicode 10 327(11)327_{(11)}
Key Agreement with Curve25519 and Curve448 324(11)324_{(11)}
Local-Variable Syntax for Lambda Parameters 323(11)323_{(11)}
HTTP Client API 321(11)321_{(11)}
Remove the Java EE and CORBA Modules 320(11)320_{(11)}
Epsilon: A No-Op Garbage Collector 318(11)318_{(11)}
Improve Aarch64 Intrinsics 315(11)315_{(11)}
Dynamic Class-File Constants 309(11)309_{(11)}
Nest-Based Access Control 181(11)181_{(11)}
Time-Based Release Versioning 322(10)322_{(10)}
Root Certificates 319(10)319_{(10)}
Experimental Java-Based JIT Compiler 317(10)317_{(10)}
Heap Allocation on Alternative Memory Devices 316(10)316_{(10)}
Additional Unicode Language-Tag Extensions 314(10)314_{(10)}
Remove the Native-Header Generation Tool (javah) 313(10)313_{(10)}
Thread-Local Handshakes 312(10)312_{(10)}
Application Class-Data Sharing 310(10)310_{(10)}
Parallel Full GC for G1 307(10)307_{(10)}
Garbage-Collector Interface 304(10)304_{(10)}
Consolidate the JDK Forest into a Single Repository 296(10)296_{(10)}
Local-Variable Type Inference 286(10)286_{(10)}