JDK Features
For the following JDK features we have in-depth descriptions here at the Java Version Almanac:
All Features
Overview of all new features (excluding previews) of all Java releases:
Feature | References | Release |
---|---|---|
Late Barrier Expansion for G1 | JEP 475 | Java 24 |
Remove the Windows 32-bit x86 Port | JEP 479 | Java 24 |
Ahead-of-Time Class Loading & Linking | JEP 483 | Java 24 |
ZGC: Remove the Non-Generational Mode | JEP 490 | Java 24 |
Synchronize Virtual Threads without Pinning | JEP 491 | Java 24 |
Deprecate the 32-bit x86 Port for Removal | JEP 501 | Java 24 |
Prepare to Restrict the Use of JNI | JEP 472 | Java 24 |
Class-File API | JEP 484 | Java 24 |
Stream Gatherers | JEP 485 | Java 24 |
Permanently Disable the Security Manager | JEP 486 | Java 24 |
Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechanism | JEP 496 | Java 24 |
Quantum-Resistant Module-Lattice-Based Digital Signature Algorithm | JEP 497 | Java 24 |
Warn upon Use of Memory-Access Methods in sun.misc.Unsafe | JEP 498 | Java 24 |
Linking Run-Time Images without JMODs | JEP 493 | Java 24 |
Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal | JEP 471 | Java 23 |
ZGC: Generational Mode by Default | JEP 474 | Java 23 |
Markdown Documentation Comments | JEP 467 | Java 23 |
Region Pinning for G1 | JEP 423 | Java 22 |
Unnamed Variables & Patterns | JEP 456 | Java 22 |
Foreign Function & Memory API | JEP 454 | Java 22 |
Launch Multi-File Source-Code Programs | JEP 458 | Java 22 |
Generational ZGC | JEP 439 | Java 21 |
Deprecate the Windows 32-bit x86 Port for Removal | JEP 449 | Java 21 |
Prepare to Disallow the Dynamic Loading of Agents | JEP 451 | Java 21 |
Record Patterns | JEP 440, Java Almanac | Java 21 |
Pattern Matching for switch | JEP 441, Java Almanac | Java 21 |
Sequenced Collections | JEP 431 | Java 21 |
Virtual Threads | JEP 444, Java Almanac | Java 21 |
Key Encapsulation Mechanism API | JEP 452 | Java 21 |
Linux/RISC-V Port | JEP 422 | Java 19 |
UTF-8 by Default | JEP 400 | Java 18 |
Simple Web Server | JEP 408 | Java 18 |
Code Snippets in Java API Documentation | JEP 413 | Java 18 |
Reimplement Core Reflection with Method Handles | JEP 416 | Java 18 |
Internet-Address Resolution SPI | JEP 418 | Java 18 |
Deprecate Finalization for Removal | JEP 421 | Java 18 |
Restore Always-Strict Floating-Point Semantics | JEP 306 | Java 17 |
New macOS Rendering Pipeline | JEP 382 | Java 17 |
macOS/AArch64 Port | JEP 391 | Java 17 |
Enhanced Pseudo-Random Number Generators | JEP 356 | Java 17 |
Deprecate the Applet API for Removal | JEP 398 | Java 17 |
Strongly Encapsulate JDK Internals | JEP 403 | Java 17 |
Remove RMI Activation | JEP 407 | Java 17 |
Sealed Classes | JEP 409, Java Almanac | Java 17 |
Remove the Experimental AOT and JIT Compiler | JEP 410 | Java 17 |
Deprecate the Security Manager for Removal | JEP 411 | Java 17 |
ZGC: Concurrent Thread Processing | JEP 376 | Java 16 |
Alpine Linux Port | JEP 386 | Java 16 |
Windows/AArch64 Port | JEP 388 | Java 16 |
Strongly Encapsulate JDK Internals by Default | JEP 396 | Java 16 |
Unix-Domain Socket Channels | JEP 380 | Java 16 |
Warnings for Value-Based Classes | JEP 390 | Java 16 |
Pattern Matching for instanceof | JEP 394, Java Almanac | Java 16 |
Records | JEP 395, Java Almanac | Java 16 |
Static Members in Inner Classes | JEP 395 | Java 16 |
Packaging Tool | JEP 392 | Java 16 |
Enable C++14 Language Features | JEP 347 | Java 16 |
Migrate to Git/GitHub | JEP 357, JEP 369 | Java 16 |
Disable and Deprecate Biased Locking | JEP 374 | Java 15 |
ZGC | JEP 377 | Java 15 |
Shenandoah GC | JEP 379 | Java 15 |
Remove the Solaris and SPARC Ports | JEP 381 | Java 15 |
Text Blocks | JEP 378, Java Almanac | Java 15 |
Edwards-Curve Digital Signature Algorithm (EdDSA) | JEP 339 | Java 15 |
Hidden Classes | JEP 371 | Java 15 |
Remove the Nashorn JavaScript Engine | JEP 372 | Java 15 |
Deprecate RMI Activation for Removal | JEP 385 | Java 15 |
Reimplement the Legacy DatagramSocket API | JEP 373 | Java 15 |
NUMA-Aware Memory Allocation for G1 | JEP 345 | Java 14 |
JFR Event Streaming | JEP 349 | Java 14 |
Helpful NullPointerExceptions | JEP 358 | Java 14 |
Deprecate the Solaris and SPARC Ports | JEP 362 | Java 14 |
Remove the Concurrent Mark Sweep (CMS) Garbage Collector | JEP 363 | Java 14 |
ZGC on macOS | JEP 364 | Java 14 |
ZGC on Windows | JEP 365 | Java 14 |
Deprecate the ParallelScavenge + SerialOld GC Combination | JEP 366 | Java 14 |
Switch Expressions | JEP 361, Java Almanac | Java 14 |
Non-Volatile Mapped Byte Buffers | JEP 352 | Java 14 |
Remove the Pack200 APIs | JEP 367 | Java 14 |
Remove the Pack200 Tools | JEP 367 | Java 14 |
Dynamic CDS Archives | JEP 350 | Java 13 |
ZGC: Uncommit Unused Memory | JEP 351 | Java 13 |
Reimplement the Legacy Socket API | JEP 353 | Java 13 |
Shenandoah GC | JEP 189 | Java 12 |
JVM Constants | JEP 334 | Java 12 |
CONSTANT_Dynamic | JEP 309 | Java 11 |
Epsilon GC | JEP 318 | Java 11 |
ZGC | JEP 333 | Java 11 |
Nest-Based Access Control | JEP 181 | Java 11 |
Low-Overhead Heap Profiling | JEP 331 | Java 11 |
Improve Aarch64 Intrinsics | JEP 315 | Java 11 |
Local Variable Syntax for Lambda Parameters | JEP 323 | Java 11 |
HTTP Client | JEP 321 | Java 11 |
Java EE and CORBA removed | JEP 320 | Java 11 |
Unicode 10 Support | JEP 327 | Java 11 |
Nashorn JavaScript Engine deprecated | JEP 335 | Java 11 |
New Cryptographic Algorithms | JEP 324, JEP 329 | Java 11 |
TLS 1.3 | JEP 332 | Java 11 |
Single Source File Launch | JEP 330 | Java 11 |
Flight Recorder | JEP 328 | Java 11 |
Pack200 deprecated | JEP 336 | Java 11 |
No more frames in JavaDoc | JDK-8196202 | Java 11 |
Graal VM | JEP 317 | Java 10 |
GC Interface | JEP 304 | Java 10 |
Parallel Full GC for G1 | JEP 307 | Java 10 |
Thread-Local Handshakes | JEP 312 | Java 10 |
Alternative Memory Devices | JEP 316 | Java 10 |
Keyword var | JEP 286, Java Almanac | Java 10 |
Additional Unicode Language-Tag Extensions | JEP 314 | Java 10 |
javah Removed | JEP 313 | Java 10 |
Module System | JEP 261 | Java 9 |
Private Methods in Interfaces | JEP 213 | Java 9 |
Var Handles | JEP 193 | Java 9 |
UTF-8 Property Resource Bundles | JEP 226 | Java 9 |
Compact Strings | JEP 254 | Java 9 |
Reactive Streams | JEP 266 | Java 9 |
Enhanced Deprecation | JEP 277 | Java 9 |
Object.finalize() deprecated | JDK-8165641 | Java 9 |
jshell | JEP 222 | Java 9 |
Multi-Release JAR Files | JEP 238 | Java 9 |
Compile for Older Platform Versions | JEP 247 | Java 9 |
jlink | JEP 282 | Java 9 |
Indify String Concatenation | JEP 280 | Java 9 |
Remove Permanent Generation | JEP 122 | Java 8 |
Lambda Expressions | JSR 335 | Java 8 |
Default Methods in Interfaces | JSR 335 | Java 8 |
Effectively Final Variables | JSR 335 | Java 8 |
Type Use Annotations | JEP 104 | Java 8 |
Repeating Annotations | JEP 120 | Java 8 |
Streams (java.util.stream) | JEP 107 | Java 8 |
Lambda APIs (java.util.function) | JEP 109 | Java 8 |
Date Time (java.time) | JSR 310, JEP 150 | Java 8 |
New Opcode INVOKEDYNAMIC | JSR 292 | Java 7 |
Switch on String | JSR 334 | Java 7 |
Try-with | JSR 334 | Java 7 |
Diamond Operator | JSR 334 | Java 7 |
Binary Integer Literals | JSR 334 | Java 7 |
Underscores in numeric literals | JSR 334 | Java 7 |
Multi Catch | JSR 334 | Java 7 |
Method Handles | JSR 292 | Java 7 |
NIO.2 (java.nio.file) | JSR 203 | Java 7 |
XML Digital Signatures (javax.xml.crypto.dsig) | JSR 105 | Java 6 |
Streaming API for XML 1.0 (javax.xml.stream) | JSR 173 | Java 6 |
Web Services Metadata (javax.jws) | JSR 181 | Java 6 |
Java API for XML Processing 1.3 (javax.xml.*) | JSR 206 | Java 6 |
JAXB 2.0 (javax.xml.bind) | JSR 222 | Java 6 |
Scripting for the Java Platform (javax.script) | JSR 223 | Java 6 |
XML-Based Web Services 2.0 (javax.xml.ws) | JSR 224 | Java 6 |
Common Annotations (javax.annotations) | JSR 250 | Java 6 |
Smart Card I/O (javax.smartcardio) | JSR 268 | Java 6 |
Pluggable Annotation Processing (javax.lang.model) | JSR 269 | Java 6 |
Java Activation Framework (javax.annotation) | JDK-6254474 | Java 6 |
javac supports java.lang.SuppressWarnings annotation | JDK-4986256 | Java 6 |
Generics | JSR 14 | Java 5 |
Annotations | JSR 175 | Java 5 |
Autoboxing | JSR 201 | Java 5 |
Enums | JSR 201 | Java 5 |
For-each Loops | JSR 201 | Java 5 |
Static Imports | JSR 201 | Java 5 |
Var Args | JSR 201 | Java 5 |
Concurrency Utilities (java.util.concurrent) | JSR 166 | Java 5 |
Keyword assert | JSR 41 | Java 1.4 |
Regular Expressions | JSR 51 | Java 1.4 |
Non-blocking IO | JSR 51 | Java 1.4 |
Logging | JSR 47 | Java 1.4 |
Preferences | JSR 10 | Java 1.4 |
XML APIs | JSR 5 | Java 1.4 |
XSLT | JSR 63 | Java 1.4 |
HotSpot | Java 1.3 | |
JNDI | Java 1.3 | |
Sound | Java 1.3 | |
Sun JIT | Java 1.2 | |
Keyword strictfp | Java 1.2 | |
Swing | Java 1.2 | |
Collections | Java 1.2 | |
Inner Classes | Java 1.1 | |
JIT (on Windows only by JavaSoft) | Java 1.1 | |
Java Beans | Java 1.1 | |
JDBC | Java 1.1 | |
RMI | Java 1.1 | |
Reflection | Java 1.1 |