自JDK 10以来的JEP列表
本文罗列了自OpenJDK 10以来各个版本的功能特性,便于追踪某些JEP跨越多个版本的孵化、预览进程。OpenJDK 9及更老版本并未采用此种快速迭代节奏。本文将不定期更新,以跟进最新的JEP计划,历史版本不会被保留。
下表中的上标#
代表“孵化”(Incubator),上标*
代表“预览”(Preview)。上标符号如有数字,即代表孵化/预览的次数,如*2
代表“第二次预览”(Second Preview)。
Feature | JDK 10 | 11 (LTS) | 12 | 13 | 14 | 15 | 16 | 17 (LTS) | 18 | 19 | 20 | 21 (LTS) | 22 | 23 | 24 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Module Import Declarations | 476* | ||||||||||||||
Prepare to Restrict the Use of JNI | 472 | ||||||||||||||
ZGC: Generational Mode by Default | 474 | ||||||||||||||
Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal | 471 | ||||||||||||||
Markdown Documentation Comments | 467 | ||||||||||||||
Primitive Types in Patterns, instanceof, and switch | 455* | ||||||||||||||
Stream Gatherers | 461* | 473*2 | |||||||||||||
Launch Multi-File Source-Code Programs | 458 | ||||||||||||||
Class-File API | 457* | 466*2 | |||||||||||||
Statements before super(…) | 447* | 482*2 | |||||||||||||
Region Pinning for G1 | 423 | ||||||||||||||
Structured Concurrency | 428# | 437#2 | 453* | 462*2 | 480*3 | ||||||||||
Key Encapsulation Mechanism API | 452 | ||||||||||||||
Prepare to Disallow the Dynamic Loading of Agents | 451 | ||||||||||||||
Deprecate the Windows 32-bit x86 Port for Removal | 449 | ||||||||||||||
Unnamed Classes and Instance Main Methods | 445* | 463*2 | 477*3 | ||||||||||||
Unnamed Patterns and Variables | 443* | 456 | |||||||||||||
Generational ZGC | 439 | ||||||||||||||
Sequenced Collections | 431 | ||||||||||||||
String Templates | 430* | 459*2 | |||||||||||||
Scoped Values | 429# | 446* | 464*2 | 481*3 | |||||||||||
Virtual Threads | 425* | 436*2 | 444 | ||||||||||||
Linux/RISC-V Port | 422 | ||||||||||||||
Record Patterns | 405* | 432*2 | 440 | ||||||||||||
Deprecate Finalization for Removal | 421 | ||||||||||||||
Internet-Address Resolution SPI | 418 | ||||||||||||||
Reimplement Core Reflection with Method Handles | 416 | ||||||||||||||
Code Snippets in Java API Documentation | 413 | ||||||||||||||
Simple Web Server | 408 | ||||||||||||||
UTF-8 by Default | 400 | ||||||||||||||
Context-Specific Deserialization Filters | 415 | ||||||||||||||
Foreign Function & Memory API | 412# | 419#2 | 424* | 434*2 | 442*3 | 454 | |||||||||
Deprecate the Security Manager for Removal | 411 | ||||||||||||||
Remove the Experimental AOT and JIT Compiler | 410 | ||||||||||||||
Pattern Matching for switch | 406* | 420*2 | 427*3 | 433*4 | 441 | ||||||||||
Strongly Encapsulate JDK Internals | 403 | ||||||||||||||
Deprecate the Applet API for Removal | 398 | ||||||||||||||
macOS/AArch64 Port | 391 | ||||||||||||||
New macOS Rendering Pipeline | 382 | ||||||||||||||
Enhanced Pseudo-Random Number Generators | 356 | ||||||||||||||
Restore Always-Strict Floating-Point Semantics | 306 | ||||||||||||||
Strongly Encapsulate JDK Internals by Default | 396 | ||||||||||||||
Warnings for Value-Based Classes | 390 | ||||||||||||||
Foreign Linker API (Incubator) | 389# | ||||||||||||||
Windows/AArch64 Port | 388 | ||||||||||||||
Elastic Metaspace | 387 | ||||||||||||||
Alpine Linux Port | 386 | ||||||||||||||
Unix-Domain Socket Channels | 380 | ||||||||||||||
ZGC: Concurrent Thread-Stack Processing | 376 | ||||||||||||||
Migrate to GitHub | 369 | ||||||||||||||
Migrate from Mercurial to Git | 357 | ||||||||||||||
Enable C++14 Language Features | 347 | ||||||||||||||
Vector API | 338# | 414#2 | 417#3 | 426#4 | 438#5 | 448#6 | 460#7 | 469#8 | |||||||
Deprecate & Remove RMI Activation for Removal | 385 | 407 | |||||||||||||
Disable and Deprecate Biased Locking | 374 | ||||||||||||||
Reimplement the Legacy DatagramSocket API | 373 | ||||||||||||||
Remove the Nashorn JavaScript Engine | 372 | ||||||||||||||
Hidden Classes | 371 | ||||||||||||||
Sealed Classes | 360* | 397*2 | 409 | ||||||||||||
Edwards-Curve Digital Signature Algorithm (EdDSA) | 339 | ||||||||||||||
Records | 359* | 384*2 | 395 | ||||||||||||
Foreign-Memory Access API | 370# | 383#2 | 393#3 | ||||||||||||
Remove the Pack200 Tools and API | 367 | ||||||||||||||
Deprecate the ParallelScavenge + SerialOld GC Combination | 366 | ||||||||||||||
ZGC on Windows | 365 | ||||||||||||||
ZGC on macOS | 364 | ||||||||||||||
Remove the Concurrent Mark Sweep (CMS) Garbage Collector | 363 | ||||||||||||||
Deprecate & Remove the Solaris and SPARC Ports | 362 | 381 | |||||||||||||
Helpful NullPointerExceptions | 358 | ||||||||||||||
Non-Volatile Mapped Byte Buffers | 352 | ||||||||||||||
JFR Event Streaming | 349 | ||||||||||||||
NUMA-Aware Memory Allocation for G1 | 345 | ||||||||||||||
Packaging Tool | 343# | 392 | |||||||||||||
Pattern Matching for instanceof | 305* | 375*2 | 394 | ||||||||||||
Text Blocks | 355* | 368*2 | 378 | ||||||||||||
Reimplement the Legacy Socket API | 353 | ||||||||||||||
ZGC: Uncommit Unused Memory | 351 | ||||||||||||||
Dynamic CDS Archives | 350 | ||||||||||||||
Promptly Return Unused Committed Memory from G1 | 346 | ||||||||||||||
Abortable Mixed Collections for G1 | 344 | ||||||||||||||
Default CDS Archives | 341 | ||||||||||||||
One AArch64 Port, Not Two | 340 | ||||||||||||||
JVM Constants API | 334 | ||||||||||||||
Switch Expressions | 325* | 354*2 | 361 | ||||||||||||
Microbenchmark Suite | 230 | ||||||||||||||
Shenandoah: A Low-Pause-Time Garbage Collector | 189 | 379 | |||||||||||||
Deprecate the Pack200 Tools and API | 336 | ||||||||||||||
Deprecate the Nashorn JavaScript Engine | 335 | ||||||||||||||
ZGC: A Scalable Low-Latency Garbage Collector | 333 | 377 | |||||||||||||
Transport Layer Security (TLS) 1.3 | 332 | ||||||||||||||
Low-Overhead Heap Profiling | 331 | ||||||||||||||
Launch Single-File Source-Code Programs | 330 | ||||||||||||||
ChaCha20 and Poly1305 Cryptographic Algorithms | 329 | ||||||||||||||
Flight Recorder | 328 | ||||||||||||||
Unicode 10 | 327 | ||||||||||||||
Key Agreement with Curve25519 and Curve448 | 324 | ||||||||||||||
Local-Variable Syntax for Lambda Parameters | 323 | ||||||||||||||
LHTTP Client (Standard) | 321 | ||||||||||||||
Remove the Java EE and CORBA Modules | 320 | ||||||||||||||
Epsilon: A No-Op Garbage Collector | 318 | ||||||||||||||
Improve Aarch64 Intrinsics | 315 | ||||||||||||||
Dynamic Class-File Constants | 309 | ||||||||||||||
Nest-Based Access Control | 181 | ||||||||||||||
Time-Based Release Versioning | 322 | ||||||||||||||
Root Certificates | 319 | ||||||||||||||
Experimental Java-Based JIT Compiler | 317 | ||||||||||||||
Heap Allocation on Alternative Memory Devices | 316 | ||||||||||||||
Additional Unicode Language-Tag Extensions | 314 | ||||||||||||||
Remove the Native-Header Generation Tool (javah) | 313 | ||||||||||||||
Thread-Local Handshakes | 312 | ||||||||||||||
Application Class-Data Sharing | 310 | ||||||||||||||
Parallel Full GC for G1 | 307 | ||||||||||||||
Garbage-Collector Interface | 304 | ||||||||||||||
Consolidate the JDK Forest into a Single Repository | 296 | ||||||||||||||
Local-Variable Type Inference | 286 |