GitHub
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:

FeatureRelease
Stream Gatherers (JEP 485)Java 23
Unnamed Patterns and Variables (JEP 456)Java 22
Pattern Matching for switch (JEP 441)Java 21
Record Patterns (JEP 440)Java 21
String Templates (JEP 430, 459, 465, withdrawn)Java 21
Unnamed Classes and Instance Main Methods (JEP 445)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:

FeatureReferencesRelease
Late Barrier Expansion for G1JEP 475Java 24
Remove the Windows 32-bit x86 PortJEP 479Java 24
Ahead-of-Time Class Loading & LinkingJEP 483Java 24
ZGC: Remove the Non-Generational ModeJEP 490Java 24
Synchronize Virtual Threads without PinningJEP 491Java 24
Deprecate the 32-bit x86 Port for RemovalJEP 501Java 24
Prepare to Restrict the Use of JNIJEP 472Java 24
Class-File APIJEP 484Java 24
Stream GatherersJEP 485Java 24
Permanently Disable the Security ManagerJEP 486Java 24
Quantum-Resistant Module-Lattice-Based Key Encapsulation MechanismJEP 496Java 24
Quantum-Resistant Module-Lattice-Based Digital Signature AlgorithmJEP 497Java 24
Warn upon Use of Memory-Access Methods in sun.misc.UnsafeJEP 498Java 24
Linking Run-Time Images without JMODsJEP 493Java 24
Deprecate the Memory-Access Methods in sun.misc.Unsafe for RemovalJEP 471Java 23
ZGC: Generational Mode by DefaultJEP 474Java 23
Markdown Documentation CommentsJEP 467Java 23
Region Pinning for G1JEP 423Java 22
Unnamed Variables & PatternsJEP 456Java 22
Foreign Function & Memory APIJEP 454Java 22
Launch Multi-File Source-Code ProgramsJEP 458Java 22
Generational ZGCJEP 439Java 21
Deprecate the Windows 32-bit x86 Port for RemovalJEP 449Java 21
Prepare to Disallow the Dynamic Loading of AgentsJEP 451Java 21
Record PatternsJEP 440, Java AlmanacJava 21
Pattern Matching for switchJEP 441, Java AlmanacJava 21
Sequenced CollectionsJEP 431Java 21
Virtual ThreadsJEP 444, Java AlmanacJava 21
Key Encapsulation Mechanism APIJEP 452Java 21
Linux/RISC-V PortJEP 422Java 19
UTF-8 by DefaultJEP 400Java 18
Simple Web ServerJEP 408Java 18
Code Snippets in Java API DocumentationJEP 413Java 18
Reimplement Core Reflection with Method HandlesJEP 416Java 18
Internet-Address Resolution SPIJEP 418Java 18
Deprecate Finalization for RemovalJEP 421Java 18
Restore Always-Strict Floating-Point SemanticsJEP 306Java 17
New macOS Rendering PipelineJEP 382Java 17
macOS/AArch64 PortJEP 391Java 17
Enhanced Pseudo-Random Number GeneratorsJEP 356Java 17
Deprecate the Applet API for RemovalJEP 398Java 17
Strongly Encapsulate JDK InternalsJEP 403Java 17
Remove RMI ActivationJEP 407Java 17
Sealed ClassesJEP 409, Java AlmanacJava 17
Remove the Experimental AOT and JIT CompilerJEP 410Java 17
Deprecate the Security Manager for RemovalJEP 411Java 17
ZGC: Concurrent Thread ProcessingJEP 376Java 16
Alpine Linux PortJEP 386Java 16
Windows/AArch64 PortJEP 388Java 16
Strongly Encapsulate JDK Internals by DefaultJEP 396Java 16
Unix-Domain Socket ChannelsJEP 380Java 16
Warnings for Value-Based ClassesJEP 390Java 16
Pattern Matching for instanceofJEP 394, Java AlmanacJava 16
RecordsJEP 395, Java AlmanacJava 16
Static Members in Inner ClassesJEP 395Java 16
Packaging ToolJEP 392Java 16
Enable C++14 Language FeaturesJEP 347Java 16
Migrate to Git/GitHubJEP 357, JEP 369Java 16
Disable and Deprecate Biased LockingJEP 374Java 15
ZGCJEP 377Java 15
Shenandoah GCJEP 379Java 15
Remove the Solaris and SPARC PortsJEP 381Java 15
Text BlocksJEP 378, Java AlmanacJava 15
Edwards-Curve Digital Signature Algorithm (EdDSA)JEP 339Java 15
Hidden ClassesJEP 371Java 15
Remove the Nashorn JavaScript EngineJEP 372Java 15
Deprecate RMI Activation for RemovalJEP 385Java 15
Reimplement the Legacy DatagramSocket APIJEP 373Java 15
NUMA-Aware Memory Allocation for G1JEP 345Java 14
JFR Event StreamingJEP 349Java 14
Helpful NullPointerExceptionsJEP 358Java 14
Deprecate the Solaris and SPARC PortsJEP 362Java 14
Remove the Concurrent Mark Sweep (CMS) Garbage CollectorJEP 363Java 14
ZGC on macOSJEP 364Java 14
ZGC on WindowsJEP 365Java 14
Deprecate the ParallelScavenge + SerialOld GC CombinationJEP 366Java 14
Switch ExpressionsJEP 361, Java AlmanacJava 14
Non-Volatile Mapped Byte BuffersJEP 352Java 14
Remove the Pack200 APIsJEP 367Java 14
Remove the Pack200 ToolsJEP 367Java 14
Dynamic CDS ArchivesJEP 350Java 13
ZGC: Uncommit Unused MemoryJEP 351Java 13
Reimplement the Legacy Socket APIJEP 353Java 13
Shenandoah GCJEP 189Java 12
JVM ConstantsJEP 334Java 12
CONSTANT_DynamicJEP 309Java 11
Epsilon GCJEP 318Java 11
ZGCJEP 333Java 11
Nest-Based Access ControlJEP 181Java 11
Low-Overhead Heap ProfilingJEP 331Java 11
Improve Aarch64 IntrinsicsJEP 315Java 11
Local Variable Syntax for Lambda ParametersJEP 323Java 11
HTTP ClientJEP 321Java 11
Java EE and CORBA removedJEP 320Java 11
Unicode 10 SupportJEP 327Java 11
Nashorn JavaScript Engine deprecatedJEP 335Java 11
New Cryptographic AlgorithmsJEP 324, JEP 329Java 11
TLS 1.3JEP 332Java 11
Single Source File LaunchJEP 330Java 11
Flight RecorderJEP 328Java 11
Pack200 deprecatedJEP 336Java 11
No more frames in JavaDocJDK-8196202Java 11
Graal VMJEP 317Java 10
GC InterfaceJEP 304Java 10
Parallel Full GC for G1JEP 307Java 10
Thread-Local HandshakesJEP 312Java 10
Alternative Memory DevicesJEP 316Java 10
Keyword varJEP 286, Java AlmanacJava 10
Additional Unicode Language-Tag ExtensionsJEP 314Java 10
javah RemovedJEP 313Java 10
Module SystemJEP 261Java 9
Private Methods in InterfacesJEP 213Java 9
Var HandlesJEP 193Java 9
UTF-8 Property Resource BundlesJEP 226Java 9
Compact StringsJEP 254Java 9
Reactive StreamsJEP 266Java 9
Enhanced DeprecationJEP 277Java 9
Object.finalize() deprecatedJDK-8165641Java 9
jshellJEP 222Java 9
Multi-Release JAR FilesJEP 238Java 9
Compile for Older Platform VersionsJEP 247Java 9
jlinkJEP 282Java 9
Indify String ConcatenationJEP 280Java 9
Remove Permanent GenerationJEP 122Java 8
Lambda ExpressionsJSR 335Java 8
Default Methods in InterfacesJSR 335Java 8
Effectively Final VariablesJSR 335Java 8
Type Use AnnotationsJEP 104Java 8
Repeating AnnotationsJEP 120Java 8
Streams (java.util.stream)JEP 107Java 8
Lambda APIs (java.util.function)JEP 109Java 8
Date Time (java.time)JSR 310, JEP 150Java 8
New Opcode INVOKEDYNAMICJSR 292Java 7
Switch on StringJSR 334Java 7
Try-withJSR 334Java 7
Diamond OperatorJSR 334Java 7
Binary Integer LiteralsJSR 334Java 7
Underscores in numeric literalsJSR 334Java 7
Multi CatchJSR 334Java 7
Method HandlesJSR 292Java 7
NIO.2 (java.nio.file)JSR 203Java 7
XML Digital Signatures (javax.xml.crypto.dsig)JSR 105Java 6
Streaming API for XML 1.0 (javax.xml.stream)JSR 173Java 6
Web Services Metadata (javax.jws)JSR 181Java 6
Java API for XML Processing 1.3 (javax.xml.*)JSR 206Java 6
JAXB 2.0 (javax.xml.bind)JSR 222Java 6
Scripting for the Java Platform (javax.script)JSR 223Java 6
XML-Based Web Services 2.0 (javax.xml.ws)JSR 224Java 6
Common Annotations (javax.annotations)JSR 250Java 6
Smart Card I/O (javax.smartcardio)JSR 268Java 6
Pluggable Annotation Processing (javax.lang.model)JSR 269Java 6
Java Activation Framework (javax.annotation)JDK-6254474Java 6
javac supports java.lang.SuppressWarnings annotationJDK-4986256Java 6
GenericsJSR 14Java 5
AnnotationsJSR 175Java 5
AutoboxingJSR 201Java 5
EnumsJSR 201Java 5
For-each LoopsJSR 201Java 5
Static ImportsJSR 201Java 5
Var ArgsJSR 201Java 5
Concurrency Utilities (java.util.concurrent)JSR 166Java 5
Keyword assertJSR 41Java 1.4
Regular ExpressionsJSR 51Java 1.4
Non-blocking IOJSR 51Java 1.4
LoggingJSR 47Java 1.4
PreferencesJSR 10Java 1.4
XML APIsJSR 5Java 1.4
XSLTJSR 63Java 1.4
HotSpotJava 1.3
JNDIJava 1.3
SoundJava 1.3
Sun JITJava 1.2
Keyword strictfpJava 1.2
SwingJava 1.2
CollectionsJava 1.2
Inner ClassesJava 1.1
JIT (on Windows only by JavaSoft)Java 1.1
Java BeansJava 1.1
JDBCJava 1.1
RMIJava 1.1
ReflectionJava 1.1