The Java Version Almanac
javaalmanac.io
Feedback on this page?

JDK Features

For the following JDK features we have in-depth descriptions here at the Java Version Almanac:

Feature Release
Pattern Matching for switch (JEP 441) Java 21
Record Patterns (JEP 440) Java 21
String Templates (JEP 430) Java 21
Unnamed Classes and Instance Main Methods (JEP 445) Java 21
Unnamed Patterns and Variables (JEP 443) Java 21
Virtual Threads (JEP 444) Java 21
Sealed Types (JEP 409) Java 17
Pattern matching for instanceof (JEP 394) Java 16
Records (JEP 395) Java 16
Text Blocks (JEP 378) Java 15
Switch Expressions (JEP 361) Java 14
var Keyword (JEP 286) Java 10
Method References (JSR 335) Java 8

All Features

Overview of all new features (excluding previews) of all Java releases:

Feature References Release
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